Sql-Server
SQL Server:記憶體壓力、使用者連接數和 CPU 使用率
我有以下 sql server 環境。
- SQL Server 2016 標準版。
- 128 GB 記憶體
- 96 GB 分配給 SQL Server
- 8 個 tempdb,每個 1 GB。
- 擁有一個 2.5 TB 大小的主要數據庫。
- 報告也從同一個 sql 實例完成。報告是最少的
當我看到我的計劃記憶體定期創建時存在記憶體壓力。我還注意到當我查詢環形緩衝區時顯示記憶體壓力的標誌。當我有時看到慢查詢的執行計劃時,我還會看到 tempdb 記憶體溢出、巨大的記憶體授予問題。大多數進入數據庫的讀取操作都有復雜的查詢,為了提高性能,讀取操作與以下設置並行執行。
- 最大 DOP : 8
- 並行成本門檻值 = 20
- 40 個邏輯 CPU
我一直在嘗試提高性能,並且能夠在一定程度上實現它。但是有些日子伺服器變得很慢並且事務(大部分讀取)需要 30 秒甚至 1 分鐘才能完成。因為大多數讀取事務都在執行同時,我看到了 CXCONSUMER 等待時間和事務,這也在進行其他查詢以等待資源。
我很困惑我應該從哪裡開始控制事情。我需要更多記憶體來支持 20 倍大的數據嗎?
附加資訊:我使用 TICK 堆棧中的監控工具 grafana 來查看 CPU 使用率和其他性能計數器。有時,我看到 COU 使用率非常高,隨之而來的使用者連接數也非常高。事實是那些不是真正的使用者(當我與團隊核實時)和其他一些過程導致了這種情況。我不確定,如果某些鎖定機制會導致此類問題是使用者連接激增,還有 CPU 使用率。
對於非常大的數據庫,並行度的門檻值應高於 20。
記憶體壓力可以通過調整查詢/索引、重建碎片索引、在數據庫級別啟用 TF 2371 以頻繁觸發自動更新統計資訊來避免。
作為 DBA,您可以將多個文件組添加到非常大的數據庫中,每個文件組都包含單獨的 mdf 文件(位於不同的磁碟驅動器上),並在新添加的文件組上移動更大的表以獲得更高的磁碟 IO。
聽起來像是添加 SSD 和啟用緩衝池擴展的好選擇