Performance
每秒檢查點頁數和記憶體壓力高
最近我在 mssqltips.com 上閱讀了一篇關於 SQL Server 記憶體瓶頸的博文。在這篇文章中,我閱讀了以下內容:
SQL Server 上的以下性能計數器: 緩衝區管理器對像還可以指示記憶體壓力:
- 大量檢查點頁面/秒
- 大量惰性寫入/秒
- 頁面讀取次數高/秒
- 緩衝區記憶體命中率低
- 低頁面預期壽命
引起我注意的是,大量的“檢查點頁面/秒”可能表明記憶體壓力。
我的理解是檢查點將“臟”頁面寫入磁碟。這可以通過不同的方式觸發。
- 自動(保持恢復間隔)
- 間接(保持目標恢復時間)
- 手動的
- 內部的
如此多的檢查點表明系統非常繁忙(在自動和間接檢查點的情況下)。
因為檢查點永遠不會從緩衝區記憶體中刪除頁面,所以我不太明白每秒檢查點的數量有多高可以指示記憶體壓力。如果存在記憶體壓力,我會看到大量的“延遲寫入/秒”。懶惰的作家從記憶體中刪除“冷頁”,為新頁騰出位置。
大量的檢查點頁面/秒如何指示記憶體壓力?
大量的檢查點頁面/秒如何指示記憶體壓力?
它並不直接表示記憶體壓力。該值本身是累積的,並不能深入了解記憶體壓力。
在您提到的部落格中,我不會依賴以下 2 個計數器來解決記憶體壓力。
- 緩衝區記憶體命中率(BCHR)
- 檢查點頁面/秒
對於 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)