Sql-Server

即使 SQL Server 無法為查詢授予請求的記憶體,查詢是否仍會執行?

  • January 8, 2022

我今天正在考慮類似的事情,但我找不到這條資訊。

當 SQL Server 請求記憶體而作業系統無法提供時,我們會得到RESOURCE_SEMAPHORE等待類型。

但我找不到如下資訊:

  1. 假設查詢要求 3GB。但是只能提供2,查詢仍然執行緩慢,還是一直等待?
  2. RESOURCE_SEMAPHORE意味著查詢處於“停止”狀態,只是在等待記憶體?
  3. 未決的記憶體授予應始終為 0 對嗎?這意味著查詢正在請求多少記憶體但仍在等待,對嗎?

我正在閱讀Memory Grants:Microsoft 的神秘 SQL Server memory consumer with Many Names,但它沒有解釋這一點,它只是解釋了 Memory grant 是什麼。

Paul Randal 描述了RESOURCE_SEMAPHORE

這種等待類型是當執行緒等待查詢執行記憶體授予以便它可以開始執行時。

$$ emphasis added $$

我理解如果沒有所需的記憶體,查詢將無法開始。他的文章還提到查詢不會永遠等待:

這種類型的高等待是因為查詢無法獲得它們需要執行的記憶體,並且您可能還會看到錯誤8645(“在資源池中等待記憶體資源執行查詢時發生超時”()。重新執行查詢。 ”

文件如何解決 SQL Server 錯誤 8645也可能有所幫助:

當記憶體密集型查詢(例如涉及排序和散列的查詢)排隊並且無法在超時期限之前獲得請求的記憶體時,將引發錯誤消息 8645。SQL Server 等待記憶體的時間長度取決於查詢等待配置值。預設情況下,查詢等待值設置為 -1,這意味著 SQL Server 等待查詢估計成本的 25 倍。如果將查詢等待值修改為非負數,SQL Server 將等待您在查詢等待選項的值中指定的秒數。

引用自:https://dba.stackexchange.com/questions/305052