Dol*_*ley 1 sql-server statistics sql-server-2012
我们有一个针对大型表的本地更新统计作业,它基本上发出 UPDATE STATS 命令。从历史上看,我们一直默认使用 FULL SCAN,但最近我们切换到 SAMPLE 50 PERCENT。奇怪的是,update stats 命令的运行时间要高得多。
举个例子,我们有表 1,它有 6 个统计信息(3 个索引,3 个自动生成)。聚集索引为 1.2 TB;NCI 1 为 2.7 GB;NCI 2 为 2.6 GB
1 个月前使用 FULL SCAN 更新了表上的统计信息,该命令耗时 96 分钟。昨晚更新了统计数据,SAMPLE 50 PERCENT,命令耗时 593 分钟!两次运行之间的表行数大致相同。
我可以从 sys.dm_db_stats_properties 看到聚集索引只占用了 4 分钟的时间。我的问题是,为什么将采样率降低 50% 会导致命令运行时间延长近 5 倍?
命令运行时没有发生任何阻塞(根据 SQL Sentry),也没有任何资源瓶颈(CPU < 40%,IO 延迟 < 10 by-in-large)。
我想知道的一件事是并行性是否在起作用 - 使用完整扫描,SQL 可以使用并行性,但使用示例 % 它是单线程的吗?
我们正在运行 SQL 2012 SP2 CU7
当您运行 stat updates 时WITH FULLSCAN
,它会并行运行。我相信它自 SQL 2005 以来一直存在。
来自 TechNet:
“全扫描的并行统计信息收集:对于使用全扫描收集的统计信息,可以为非分区表和分区表并行创建单个统计对象。”
来源:https : //technet.microsoft.com/en-us/library/cc966419.aspx
当您不使用FULLSCAN
引擎时,请利用TABLESAMPLE
作为并行抑制器的选项。在 SQL 2016 中,抽样统计更新也可以并行进行。
资料来源:平行统计更新
归档时间: |
|
查看次数: |
295 次 |
最近记录: |