好贷网好贷款

关于SQL Server 2008 数据压缩新特性的性能问题疑惑 40guohao0826]

发布时间:2016-12-3 14:55:43 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"关于SQL Server 2008 数据压缩新特性的性能问题疑惑 40guohao0826]",主要涉及到关于SQL Server 2008 数据压缩新特性的性能问题疑惑 40guohao0826]方面的内容,对于关于SQL Server 2008 数据压缩新特性的性能问题疑惑 40guohao0826]感兴趣的同学可以参考一下。

-测试行压缩,页压缩对CPU、Reads和Duration的影响 --创建没有压缩的表 IF OBJECT_ID('dbo.TBNone') IS NOT NULL      DROP TABLE dbo.TBNone ; GO CREATE TABLE dbo.TBNone     (       TBID INT NOT NULL ,       MyMoney1 money,       MyMoney2 money,       MyMoney3 money,       MyMoney4 money,       MyVarchar VARCHAR(200)     )     WITH (          DATA_COMPRESSION= NONE) GO --添加聚集索引 ALTER TABLE TBNone ADD  CONSTRAINT [PK_TBNone_TBID] PRIMARY KEY CLUSTERED  ( TBID ASC ) --创建行压缩的表 IF OBJECT_ID('dbo.TBRow') IS NOT NULL      DROP TABLE dbo.TBRow ; GO CREATE TABLE dbo.TBRow     (       TBID INT NOT NULL ,       MyMoney1 money,       MyMoney2 money,       MyMoney3 money,       MyMoney4 MONEY,       MyVarchar VARCHAR(200)     )     WITH (          DATA_COMPRESSION= ROW) GO --添加聚集索引 ALTER TABLE TBRow ADD  CONSTRAINT [PK_TBRow_TBID] PRIMARY KEY CLUSTERED  ( TBID ASC ) GO --创建页压缩的表 IF OBJECT_ID('dbo.TBPage') IS NOT NULL      DROP TABLE dbo.TBPage ; GO CREATE TABLE dbo.TBPage     (       TBID INT NOT NULL ,       MyMoney1 money,       MyMoney2 money,       MyMoney3 money,       MyMoney4 money,       MyVarchar VARCHAR(200)     )     WITH (          DATA_COMPRESSION= PAGE) GO --添加聚集索引 ALTER TABLE TBPage ADD  CONSTRAINT [PK_TBPage_TBID] PRIMARY KEY CLUSTERED  ( TBID ASC ) GO --插入大量数据 DECLARE @n INT SET @n = 0 WHILE @n <= 300000      BEGIN         INSERT  INTO TBNone         VALUES  ( @n, 100.00,100.00,100.00,100.00,'sdfsdfsfsdfsdf打发士大夫少发说地方是大方说的发是打发士大夫的是说地方是大方说的发是三房的发生的发')         SET @n = @n + 1     END GO DECLARE @n INT SET @n = 0 WHILE @n <= 300000      BEGIN         INSERT  INTO TBRow         VALUES  ( @n, 100.00,100.00,100.00,100.00,'sdfsdfsfsdfsdf打发士大夫少发说地方是大方说的发是打发士大夫的是说地方是大方说的发是三房的发生的发')         SET @n = @n + 1     END GO DECLARE @n INT SET @n = 0 WHILE @n <= 300000      BEGIN         INSERT  INTO TBPage         VALUES  ( @n, 100.00,100.00,100.00,100.00,'sdfsdfsfsdfsdf打发士大夫少发说地方是大方说的发是打发士大夫的是说地方是大方说的发是三房的发生的发')         SET @n = @n + 1     END GO --查看数据结构 DBCC TRACEON(3604) GO DBCC IND(DataCompression,TBNone,-1) DBCC IND(DataCompression,TBRow,-1) DBCC IND(DataCompression,TBPage,-1) GO --测试 SET NOCOUNT ON SET STATISTICS IO ON SET STATISTICS Time ON DBCC DROPCLEANBUFFERS    --CPU 时间 = 78 毫秒,占用时间 = 1137 毫秒。 SELECT * FROM TBNone WHERE MyMoney1=111 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --表 'TBNone'。扫描计数 1,逻辑读取 5476 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 -- SQL Server 执行时间: --   CPU 时间 = 31 毫秒,占用时间 = 40 毫秒。 DBCC DROPCLEANBUFFERS --   CPU 时间 = 31 毫秒,占用时间 = 629 毫秒。 SELECT * FROM TBRow WHERE MyMoney1=111 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --表 'TBRow'。扫描计数 1,逻辑读取 4627 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 -- SQL Server 执行时间: --   CPU 时间 = 47 毫秒,占用时间 = 50 毫秒。 DBCC DROPCLEANBUFFERS --   CPU 时间 = 46 毫秒,占用时间 = 76 毫秒。 SELECT * FROM TBPage WHERE MyMoney1=111 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --SQL Server 分析和编译时间:  --   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 --表 'TBPage'。扫描计数 1,逻辑读取 417 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 -- SQL Server 执行时间: --   CPU 时间 = 47 毫秒,占用时间 = 49 毫秒。 SET STATISTICS TIME OFF SET STATISTICS IO OFF ------------------------------------------------------------------------------- 以上是脚本,大家执行后可以测试 在清除缓存的情况下,性能有提升。毋庸置疑。毕竟IO少了 在数据表全部在内存的时候,行压缩、页压缩相对于无压缩的消耗的CPU相同并且IO更小,但是Duration时间反而长呢?不解 请问cpu reads duration之间是什么关系(分别从有缓存和无缓存考虑)?

帮顶学习

可悲啊,我的机子把sql 2008装不上

该回复于2011-02-23 09:10:03被版主删除

把表建好,数据插上,关闭服务,再重新打开服务,运行测试,得如下数据: [code=SQL] DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 15 毫秒,占用时间 = 24 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBNone'。扫描计数 1,逻辑读取 5476 次,物理读取 37 次,预读 5463 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 78 毫秒,占用时间 = 1396 毫秒。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 0 毫秒,占用时间 = 4 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBRow'。扫描计数 1,逻辑读取 4627 次,物理读取 29 次,预读 4623 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 110 毫秒,占用时间 = 1017 毫秒。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 15 毫秒,占用时间 = 3 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBPage'。扫描计数 1,逻辑读取 417 次,物理读取 3 次,预读 411 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 63 毫秒,占用时间 = 135 毫秒。 [code]

 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 15 毫秒,占用时间 = 24 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBNone'。扫描计数 1,逻辑读取 5476 次,物理读取 37 次,预读 5463 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 78 毫秒,占用时间 = 1396 毫秒。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 0 毫秒,占用时间 = 4 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBRow'。扫描计数 1,逻辑读取 4627 次,物理读取 29 次,预读 4623 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 110 毫秒,占用时间 = 1017 毫秒。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。  SQL Server 执行时间:    CPU 时间 = 15 毫秒,占用时间 = 3 毫秒。 SQL Server 分析和编译时间:     CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 表 'TBPage'。扫描计数 1,逻辑读取 417 次,物理读取 3 次,预读 411 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。  SQL Server 执行时间:    CPU 时间 = 63 毫秒,占用时间 = 135 毫秒。

不懂 可能需要对压缩的数据进行额外别的计算 

mark, 我只想知道最后的结果。

回复:qianjin036a 我强调了是有缓存的情况。 如果没有缓存,物理读消耗大量的时间,这个是毋庸置疑的, 有缓存的情况下 cpu时间一样 IO更小,为什么duration更大?我问的是这个问题 cpu时间指的是事件占用cpu时间 duration是事件的占用时间 在撇开IO的情况下 难道cpu和duration不是应该成正比的吗?

自己给自己解释一下 快的语句是因为执行计划使用了并行 慢的语句是因为执行计划不能并行 引发了一个问题,难道sql protfile里面的cpu统计的是各个CPU的累积时间吗? 谁能告诉我?

上一篇:高手来! 40love521_sql]
下一篇:sql 文求 sqlserver 20songweida8076]

相关文章

相关评论