Sql-Server

SQL Server:記憶體壓力、使用者連接數和 CPU 使用率

  • March 6, 2021

我有以下 sql server 環境。

  1. SQL Server 2016 標準版。
  2. 128 GB 記憶體
  3. 96 GB 分配給 SQL Server
  4. 8 個 tempdb,每個 1 GB。
  5. 擁有一個 2.5 TB 大小的主要數據庫。
  6. 報告也從同一個 sql 實例完成。報告是最少的

當我看到我的計劃記憶體定期創建時存在記憶體壓力。我還注意到當我查詢環形緩衝區時顯示記憶體壓力的標誌。當我有時看到慢查詢的執行計劃時,我還會看到 tempdb 記憶體溢出、巨大的記憶體授予問題。大多數進入數據庫的讀取操作都有復雜的查詢,為了提高性能,讀取操作與以下設置並行執行。

  • 最大 DOP : 8
  • 並行成本門檻值 = 20
  • 40 個邏輯 CPU

我一直在嘗試提高性能,並且能夠在一定程度上實現它。但是有些日子伺服器變得很慢並且事務(大部分讀取)需要 30 秒甚至 1 分鐘才能完成。因為大多數讀取事務都在執行同時,我看到了 CXCONSUMER 等待時間和事務,這也在進行其他查詢以等待資源。

我很困惑我應該從哪裡開始控制事情。我需要更多記憶體來支持 20 倍大的數據嗎?

附加資訊:我使用 TICK 堆棧中的監控工具 grafana 來查看 CPU 使用率和其他性能計數器。有時,我看到 COU 使用率非常高,隨之而來的使用者連接數也非常高。事實是那些不是真正的使用者(當我與團隊核實時)和其他一些過程導致了這種情況。我不確定,如果某些鎖定機制會導致此類問題是使用者連接激增,還有 CPU 使用率。

對於非常大的數據庫,並行度的門檻值應高於 20。

記憶體壓力可以通過調整查詢/索引、重建碎片索引、在數據庫級別啟用 TF 2371 以頻繁觸發自動更新統計資訊來避免。

作為 DBA,您可以將多個文件組添加到非常大的數據庫中,每個文件組都包含單獨的 mdf 文件(位於不同的磁碟驅動器上),並在新添加的文件組上移動更大的表以獲得更高的磁碟 IO。

聽起來像是添加 SSD 和啟用緩衝池擴展的好選擇

https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/buffer-pool-extension?view=sql-server-ver15

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