为什么对于具有相同硬件功能的相同表,全扫描更新统计信息在SQL Server 2014上可能使用20%的CPU,而在SQL Server 2014上却使用100%的CPU?
我一直在寻找MAXDOP
,其他选项,但实际上看不到任何脱颖而出的东西。我意识到可能存在可能导致这种情况的设置,但是两个数据库的设置都非常相似(例如,两个数据库的设置均为MAXDOP
4,并且两个数据库都有多个内核)。两者都是企业版。
SQL Server 2014与SQL Server 2008 R2中是否有某些“不同之处”可以解释这一点?两台服务器的内存选项均为90%。对寻找什么有任何想法吗?
我每周在使用SQL Server 2008 R2 / SP3和SQL Server 2014 / SP2的两台服务器上以完整(100%)扫描运行更新统计信息,并且数据库具有相同的结构。在2008 R2服务器上,两个非常大的表的更新状态需要花费几个小时,这是我期望的,但是CPU始终保持在20%左右的利用率以下。但是,在2014年服务器上,CPU会在100%的时间内运行40分钟。这些表格在2014服务器上要小一些。我通过使用SQL Monitor分析菜单看到了这一点。
这是2014 SQL Server上Ola日志文件的输出,CPU从大约2:10到2:45达到100%:
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
以下是上述两个统计信息在2008 R2 SQL Server上Ola日志文件的输出,但是CPU可能达到15%:
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
我无法使用服务器maxdop = 1来运行它们,因为这样会消除所有并行计划的生成,并且可能会损害应用程序。我计划朝相反的方向增加到8个(盒子上有16个核),然后看看会发生什么。可能会加快速度以减少固定CPU的时间。在大多数用户不在的情况下运行此作业。
tempdb
配置一样吗?它可以在UPDATE STATISTICS
运行时使用,因此也可能是一个问题。