未知的SQL Server等待类型

时间:2015-07-06 12:41:11

标签: sql-server-2014

我们正在使用SQL Server 2014 Enterprise,对于某些表,我们使用的是群集列存储索引。

有时,在运行查询时,我们会看到未知等待类型,例如HTREBUILDHTREPARTITIONHTMEMO。使用Google搜索并没有给出任何有意义的结果。

有谁知道这些是什么,如果是的话,你能告诉我们一些背景吗?

1 个答案:

答案 0 :(得分:0)

  

HTREBUILD,HTREPARTITION,Source,HTDELETE

此等待类型(以及其他HT *等待)是线程正在等待访问批处理模式处理期间使用的共享哈希表。 SQL Server 2012曾经使用每个线程的哈希表 SQL Server 2014 现在使用共享哈希表。

基本上; SQL Server 2014现在使用一个共享哈希表而不是每个线程副本。

这一更改是为了减少哈希表所需的内存量,但在同步对哈希表的访问时会以这些等待为代价。通常,这些等待在查询涉及列存储索引时发生,但如果哈希运算符以批处理模式运行,它们也可能在没有列存储索引的情况下发生。

使用一个共享哈希表而不是每个线程副本:

提供显着降低内存量的好处 需要保持哈希表,但是,你可以想象,多个 取决于散列表的单个副本的线程必须与之同步 彼此之前,例如,解除分配哈希表。这样做,那些 线程等待HTMEMO(哈希表删除)等待类型。