并行统计更新


14

在SQL Server 2008或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息-它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

Answers:


22

从SQL Server 2005开始,并行统计信息已可用。TechNet文章“ Microsoft SQL Server 2005中的查询优化器使用的统计信息”中记录了该更新:

文章摘录

在执行全面扫描(无论是否明确请求)的情况下,为数据收集而生成的内部查询具有以下一般形式:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

注意MAXDOP那里的提示(尽管用户无法手动指定提示)。在收集抽样统计信息的地方,内部查询使用该TABLESAMPLE子句,该子句可防止并行性。引擎还会MAXDOP 1在内部查询上生成提示,这有点多余。

如果您需要减少并行度,则MAXDOP可以使用资源调控器(仅限企业版)覆盖内部查询中的提示。

SQL Server 2016 添加了并行采样统计信息更新。


1

从SQL Server 2016 SP2开始,您可以使用MAXDOPoption。

更新为CREATE STATISTICS和UPDATE STATISTICS语句增加了对MAXDOP选项的支持

此更新为Microsoft SQL Server 2016和2017中的CREATE STATISTICS和UPDATE STATISTICS语句增加了对MAXDOP选项的支持。这使您可以覆盖在数据库或服务器级别指定的最大并行度(MAXDOP)的默认设置。

注意:如果使用了资源调控器,则结果并行度由工作负载组MAX_DOP设置限制。

例如,假设使用了Sales.SalesOrderDetail表,并且已经在其上创建了一些统计信息。在这种情况下,以下脚本以等于8的并行度更新每个统计信息。

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

UPDATE STATISTICS没有任何内部并行性。无论是使用FULLSCAN还是SAMPLING运行都没有关系。当然,您可以一次运行多个UPDATE STATISTICS命令,每个命令可以通过多个SQL Agent作业或其他一些便利在不同的连接上运行。根据您使用硬件和数据的实际情况,您可能会发现,仅对表重新索引要比使用FULLSCAN进行UPDATE STATISTICS更快,并且可能是更好的选择。


很抱歉给您减记,但您不知道您在说什么。从此白皮书msdn.microsoft.com/zh-cn/library/dd535534(v=sql.100).aspx “为全扫描收集并行统计信息:对于使用全扫描收集统计信息,可以并行创建单个统计对象,以进行全扫描非分区表和分区表。” 但是,当我对3,000万行表使用UPDATE STATISTICS进行全面扫描时,我看不到并行性
SQL Learner

另外,更新统计信息会锁定架构稳定性,因此,如果您运行其他更新统计信息,它将等待较早的更新完成。
SQL学习者

4
@SQLLearner:没冒犯,但无论此答案的正确性如何,如果您已阅读该白皮书,为什么还要问这个问题?它为您解答了所有问题。如果您没有看到针对特定情况的并行性,那么请编辑问题以说明该问题以及其他有关事件的详细信息。
乔恩·塞格尔

乔恩·塞格尔(Jon Seigel)在发布问题后找到并阅读了白皮书,但是在网上搜索仍不确定更新状态是否可以使用并行性。
SQL Learner 2012年

4
对于白皮书和sql2008,您是正确的。我刚刚读了这份白皮书。我脑海中的信息已经过时了。在重新编制索引,更新统计信息,FULLSCAN与SAMPLE,作业所需的时间以及统计信息页面上数据的随机质量方面,sql2005甚至sql2000都存在很多问题。我想所有的痛苦现在都是桥下的水。我要说的是,您可以在不同的表上并行运行UPDATE STATS,但这似乎比它的价值还麻烦,而且您可能有太多的I / O争用,不值得。
达林海峡2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.