我们正在使用SQL Server 2014 Enterprise,对于某些表,我们使用的是群集列存储索引。
有时,在运行查询时,我们会看到未知等待类型,例如HTREBUILD
,HTREPARTITION
,HTMEMO
。使用Google搜索并没有给出任何有意义的结果。
有谁知道这些是什么,如果是的话,你能告诉我们一些背景吗?
答案 0 :(得分:0)
HTREBUILD,HTREPARTITION,Source,HTDELETE
此等待类型(以及其他HT *等待)是线程正在等待访问批处理模式处理期间使用的共享哈希表。 SQL Server 2012曾经使用每个线程的哈希表而 SQL Server 2014 现在使用共享哈希表。
基本上; SQL Server 2014现在使用一个共享哈希表而不是每个线程副本。
这一更改是为了减少哈希表所需的内存量,但在同步对哈希表的访问时会以这些等待为代价。通常,这些等待在查询涉及列存储索引时发生,但如果哈希运算符以批处理模式运行,它们也可能在没有列存储索引的情况下发生。
使用一个共享哈希表而不是每个线程副本:
提供显着降低内存量的好处 需要保持哈希表,但是,你可以想象,多个 取决于散列表的单个副本的线程必须与之同步 彼此之前,例如,解除分配哈希表。这样做,那些 线程等待HTMEMO(哈希表删除)等待类型。