Azure-Sql-Database

Azure SQL 數據庫 DTU 計算使用率最大化

  • September 24, 2020

我有一個 Azure SQL 數據庫,它從 0-3%(平均)之間的低 DUT 基線變為現在以 100% 的使用率最大化。

Azure SQL DTU 消耗

這是針對 LOB 應用程序的,我們需要了解是什麼導致使用率像這樣最大化。伺服器標配 200 個 DTU,而不是在彈性池中。

Query performance insight在 Azure 門戶中查看過,雖然有一些長時間執行的查詢,但在過去一周中,最高違規者僅代表 0.3% 的 CPU 和 0.23% 的數據 IO。

查詢洞察

任何人都可以提供一個很好的策略來診斷這裡的問題嗎?

最高罪犯僅佔 CPU 的 0.3%

DTU 是 CPU 和 IO 時間的包,因此您很可能有執行大量讀取 IO(最有可能是索引或表掃描)或寫入 IO 的查詢。

突然的變化可能是因為:

  • 該應用程序的新版本具有新的 SQL 活動,尚未在像您的生產數據一樣縮放/形狀的數據上進行測試。尋找消耗大量 IO 的長時間執行的語句。這裡的解決方案將是改進這些查詢和/或支持它們的索引選擇。
  • 數據大小的顯著變化(突然或隨著時間的推移)意味著您的常用工作集不再方便地放入 RAM 中,這意味著緩衝池正在顛簸導致額外的 IO 工作。
  • 數據形狀的顯著變化(突然或隨著時間的推移)意味著查詢計劃者很難選擇最佳路徑。如果長時間未完成刷新索引統計資訊,有時會對此有所幫助。
  • 如果您的應用程序允許使用者定義報告或過濾器,他們可能已經創建了與第 1 點具有相同效果的內容(您可能會以相同的方式檢測到這一點)。
  • 活躍使用者突然湧入,或現有使用者突然變得更加活躍。檢查您的應用程序日誌。

或者上述的一些混合。

您沒有說明您的數據庫目前是什麼服務級別(服務層、服務級別、它是否在池中,如果是,則池的層/級別和每個 DB 設置) - 編輯它是個好主意進入你的問題。

對於短期修復,增加該數據庫的 DTU 分配。如果負載主要是 IO,則考慮從標準層轉移到高級層(雖然他們沒有公開記錄 DTU 是如何組成/判斷的,但據說高級 DTU 的 IO 比標準層高一個數量級因此,從標準 100 升級到高級 125 有時比從標準 100 升級到標準 400 更有效,但成本更低)。

問題中的額外資訊後更新

罪魁禍首… 0.23% 的數據 IO

您的螢幕抓取是按 CPU 排序的顯示 - 所以 CPU 使用的頭號罪犯顯然沒有使用太多 IO。但是,如果您正在尋找導致大量 IO 的程序,那麼您需要按 IO 排序,因為這可能也不會消耗 CPU(您的 CPU 分配可能會等待 IO 完成)。

儘管從該顯示中值得檢查這四個的行為是否盡可能好,尤其是第四個,每次執行平均需要 22.5 分鐘。這可能是由於鎖定問題,因此沒有顯示太多 CPU 或 IO 活動,但無論如何都值得調查。

在過去的一周。

根據頂部圖表,您的問題僅在幾天前開始,因此查看整周可能沒有那麼有意義。性能洞察選項卡允許您進行更精細的放大。

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