我现在正在构建 Columnstore 索引。输出来自sp_whoisactive
:
这是一台开发机。没有其他东西在运行。服务器有 8GB 可用内存。CPU 几乎空闲。该构建似乎处于全局字典采样阶段,因为sqlservr.exe
它正在执行随机磁盘 IO 并且几乎没有写入任何内容。
这是否SLEEP_TASK
表明我可以采取措施使索引构建速度更快?为什么构建有时会“休眠”?
这是 SQL Server 2014 SP1。
我现在正在构建 Columnstore 索引。输出来自sp_whoisactive
:
这是一台开发机。没有其他东西在运行。服务器有 8GB 可用内存。CPU 几乎空闲。该构建似乎处于全局字典采样阶段,因为sqlservr.exe
它正在执行随机磁盘 IO 并且几乎没有写入任何内容。
这是否SLEEP_TASK
表明我可以采取措施使索引构建速度更快?为什么构建有时会“休眠”?
这是 SQL Server 2014 SP1。
SLEEP_TASK 空闲一般睡眠。SLEEP_TASK 是一种通用等待,用于不存在更具体等待类型的各种事情,但它确实会出现溢出到 tempdb 的散列操作(加入/聚合),偶尔也会出现在交换(并行运算符)中消费者正在等待不是正常 CXPACKET 或 EXECSYNC 等待的东西。我会先检查哈希溢出 SQL Server 中的 SLEEP_TASK 等待类型 - 它表示什么?
为了帮助全局字典更好地反映整个表中的数据,列存储索引构建过程已在 SQL Server 2014 中更改。
它现在首先在一个线程上启动,该线程从整个表中读取数据页的样本选择,以便为每一列形成一个全局字典;之后第二阶段开始使用所有可用线程来构建实际的列存储索引。
SQL Server 2014 在构建全局字典时将采样的行数取决于表中的总行数(“基数”)。
由于涉及并行运算符,因此引入了 SLEEP_TASK 等待类型。
在解决所有其他重要的等待类型之前,您应该忽略 wait_type(paul randal 的脚本会忽略它) 。
以下是研究论文的摘录- (警告:pdf):
阅读这个优秀的系列:Stairway To Columnstore Indexes - 作者:Hugo Kornelis