HT* 等待类型是什么意思?(HTREPARTITION, HTDELETE, ...)

usr*_*usr 7 sql-server sql-server-2014 batch-mode

一个大查询正在运行。溢出到磁盘的批处理模式散列连接的结果使用 流式传输到临时表中select into。该查询显示等待类型HTDELETEHTREPARTITION偶然。查询未使用列存储索引。

我很确定这些等待类型对于溢出到磁盘的批处理模式散列连接来说是正常的。出于好奇,我试图了解这些等待类型的含义。也许这种洞察力可以帮助优化查询或发现问题。那么这些等待类型是什么意思,在什么情况下它们是预期的呢?

没有列存储索引。我正在使用该left join ZeroRowCsTable on 0=1技巧为行模式表启用批处理模式。

Pau*_*ite 5

根据ypercube对问题的评论生成的社区 Wiki 答案


来自MSDN 论坛线程

HTDELETE

SQL Server 2014 现在使用一个共享哈希表而不是每线程副本。这提供了显着降低持久化哈希表所需的内存量的好处,但是,正如您可以想象的那样,依赖于哈希表的单个副本的多个线程必须在例如释放哈希表之前彼此同步. 为此,这些线程等待 HTDELETE(哈希表删除)等待类型。

(这仅适用于以批处理模式执行的哈希运算符)