为什么 Columnstore 索引构建经常等待 SLEEP_TASK?

usr*_*usr 6 sql-server sql-server-2014

我现在正在构建一个列存储索引。输出sp_whoisactive

在此处输入图片说明

这是一个开发机器。没有其他东西在运行。服务器有 8GB 可用内存。CPU 几乎空闲。构建似乎处于全局字典采样阶段,因为sqlservr.exe它正在执行随机磁盘 IO 并且几乎不写入任何内容。

这是否SLEEP_TASK表明我可以采取措施使索引构建速度更快?为什么构建有时会“休眠”?

这是 SQL Server 2014 SP1。

Kin*_*hah 3

为了帮助全局字典更好地反映整个表中的数据,SQL Server 2014中对列存储索引的构建过程进行了更改。

\n\n

现在,它首先在一个线程上启动,该线程从整个表中读取数据页的采样选择,以便为每列形成一个全局字典;之后第二阶段开始使用所有可用线程来构建实际的列存储索引

\n\n

SQL Server 2014 在构建全局字典时采样的行数取决于表中的总行数 (\xe2\x80\x9ccardinality\xe2\x80\x9d)。

\n\n

由于涉及到并行运算符,因此引入了SLEEP_TASK等待类型。

\n\n

您应该忽略 wait_type (paul randal 的脚本会忽略它),直到您解决了所有其他重要的等待类型。

\n\n

以下是研究论文的摘录 - (警告:pdf)

\n\n

在此输入图像描述

\n\n

阅读这个优秀的系列:列存储索引的阶梯 - 作者:Hugo Kornelis

\n