并行统计更新

SQL*_*ner 14 sql-server-2008 sql-server parallelism statistics

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

Pau*_*ite 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)
Run Code Online (Sandbox Code Playgroud)

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

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

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