Sql-Server

查詢處理和緩衝池

  • October 26, 2015

當 SQLServer Server 2008r2開始處理查詢時,我知道它需要解析 SQL 文本並創建計劃,以及其他一些步驟。

它在緩衝池外的記憶體中完成所有這些,對嗎?

在實際執行查詢以檢索/操作數據之前,緩衝池不會發揮作用,對嗎?

**場景:(**伺服器不是建立在我配置的之上)

SQL Server 2008r2 SP1 - 是的,它需要修補,即在雷達上 96 GB 的 RAM MAX 記憶體設置為 92 GB 緩衝池位於略低於 80 GB 使用 PLE 超過 4 小時查看 resource_semaphore WAITS

如果我的理解是處理查詢的記憶體授權不是來自緩衝池,而是剩餘的可用記憶體,那麼減少 MAX Memory 應該有助於重新調整 WAIT 類型。我的想法是將 MAX Memory 設置為 72 GB。你的意見?

謝謝!

當 SQL Server 2008r2 開始處理查詢時,我知道它需要解析 SQL 文本並創建計劃,以及其他一些步驟。它在緩衝池外的記憶體中完成所有這些,對嗎?

不,記憶體來自緩衝池內部。通常,此類程序所需的記憶體“不多”,緩衝池可以輕鬆滿足這一點。另請注意,SQL Server 可能不會一次性授予查詢請求的所有記憶體。如果查詢請求的記憶體量很大,SQL Server 只會grant minimum確保查詢開始執行。

在實際執行查詢以檢索/操作數據之前,緩衝池不會發揮作用,對嗎?

從創建計劃到執行查詢,緩衝池始終存在。緩衝池in SQL Server 2008 R2正在sole one為任何request <= 8KB of memory page.

如果我的理解是處理查詢的記憶體授權不是來自緩衝池,而是剩餘的可用記憶體,那麼減少 MAX Memory 應該有助於重新調整 WAIT 類型。我的想法是將 MAX Memory 設置為 72 GB。你的意見?

不,減少最大伺服器記憶體在這裡會有所幫助。我建議您查看查詢和“statistics優化器在準備查詢計劃時正在查看”。你有足夠的記憶體。有時,當您使用過時的統計資訊執行查詢時,它會請求大量記憶體,當然 SQL Server 不會授予所有這些記憶體。它將提供最小數量,以便查詢至少開始執行。

當 SQL Server 創建編譯計劃時,它會計算兩個記憶體授予參數,稱為“所需記憶體”和“附加記憶體”。所需記憶體是 SQL Server 可以為排序和散列操作提供的最小記憶體,另外是查詢可能需要的儲存臨時數據的記憶體huge sorts or spills。如果查詢以最小記憶體開始並請求更多記憶體,但 SQL Server 無法在執行中提供所有記憶體,則等待類型為“資源信號量”的查詢等待。這並不意味著記憶體較少,這意味著統計資訊已過時,這迫使 SQL Server 創建錯誤的計劃,從而請求更多記憶體。

我建議您閱讀了解查詢記憶體授予

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