Performance

每秒檢查點頁數和記憶體壓力高

  • February 25, 2019

最近我在 mssqltips.com 上閱讀了一篇關於 SQL Server 記憶體瓶頸的博文。在這篇文章中,我閱讀了以下內容:

SQL Server 上的以下性能計數器: 緩衝區管理器對像還可以指示記憶體壓力:

  • 大量檢查點頁面/秒
  • 大量惰性寫入/秒
  • 頁面讀取次數高/秒
  • 緩衝區記憶體命中率低
  • 低頁面預期壽命

引起我注意的是,大量的“檢查點頁面/秒”可能表明記憶體壓力。

我的理解是檢查點將“臟”頁面寫入磁碟。這可以通過不同的方式觸發。

  • 自動(保持恢復間隔)
  • 間接(保持目標恢復時間)
  • 手動的
  • 內部的

如此多的檢查點表明系統非常繁忙(在自動和間接檢查點的情況下)。

因為檢查點永遠不會從緩衝區記憶體中刪除頁面,所以我不太明白每秒檢查點的數量有多高可以指示記憶體壓力。如果存在記憶體壓力,我會看到大量的“延遲寫入/秒”。懶惰的作家從記憶體中刪除“冷頁”,為新頁騰出位置。

大量的檢查點頁面/秒如何指示記憶體壓力?

大量的檢查點頁面/秒如何指示記憶體壓力?

它並不直接表示記憶體壓力。該值本身是累積的,並不能深入了解記憶體壓力。

在您提到的部落格中,我不會依賴以下 2 個計數器來解決記憶體壓力。

  1. 緩衝區記憶體命中率(BCHR)
  2. 檢查點頁面/秒

對於 BCHR,原因已經由 Jonathan Kehayias 在本部落格中解釋過。由於 Read Head 的 SQl Server 功能,如果您依賴它,它會給您錯誤的解釋。

SQL Server 中檢查點的工作是減少 SQL Server 的整體恢復時間。更頻繁的檢查點意味著前滾所需的事務日誌記錄量更少,因此恢復時間更短。所以我不會將高檢查點頁面/秒等同於記憶體瓶頸。它需要進一步分析,或者只是在非常繁忙的系統上可以忽略。只是 SQL Server 努力確保當數據庫經歷崩潰恢復時,它會在最短的時間內聯機,讓您滿足 RTO。

如果我想查看記憶體壓力,我會在 perfmon 計數器之後觸發

  • SQLServer:緩衝區管理器對象頁面讀取/秒
  • SQLServer:緩衝區管理器對象免費頁面
  • SQLServer:緩衝區管理器對象頁面預期壽命
  • SQLServer:Buffer Manager object Free List Stalls/sec
  • 記憶體管理器:總伺服器記憶體 (KB)
  • 記憶體管理器:目標伺服器記憶體 (KB)
  • 記憶體管理器:記憶體授予掛起
  • 記憶體管理器:可用記憶體 (KB)

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