Sql-Server
這是一個過大的“鎖定”時間,是否表明存在問題?
鑑於:
- 生產環境
- 使用 Hibernate 的應用伺服器
- SQL Server Studio 管理器 v17.5
- 群集 HAG 設置中的 SQL Server 2016
- SQL Server 未啟用查詢儲存功能
- 這個問題的作者是一位軟體工程師,擁有足夠的 SQL Server 知識,可以歸類為幾乎無害
更新 1
- 數據庫增長設置:無限制,1024000 KB,僅數據
- instant_file_initialization_enabled - 是
- is_auto_update_stats_async_on - 否
更新 2
- 伺服器有 4 個 CPU 核心
- 等待任務的峰值超過 3,000,000。我還不知道它們是什麼。這一定是大“鎖定”時間的原因。
- 這些尖峰每 10 或 15 秒出現一次。我有以下圖表每秒更新一次:
問題:
根本問題是,在忙碌的一天中看似隨機的時間,幾個 SQL 查詢超時,但是,出於這個問題的目的,我對螢幕抓取是否表明本身存在問題感興趣。也許這是主觀的,但我對這個值沒有經驗。
行動:
失敗本身並沒有直接指向具體問題,因此我目前正在收集證據並儘可能嘗試消除過程。目前我正在調查是否過長的等待時間和查詢的“完美風暴”會導致級聯鎖,從而導致查詢超時。
收集到的證據:
- 幾個查詢會導致全索引掃描或全表掃描。
- 幾個帶有執行計劃的螢幕截圖,顯示了表掃描。粗略檢查表明索引確實存在 - 但尚未使用。如果它們被證明有用,我也許可以對螢幕抓取進行消毒。
- 下面的螢幕截圖顯示了較長的等待時間。
問題:
還有哪些其他資訊可以幫助確定鎖定和等待時間是否可能是查詢超時的原因?例如,我從 sql server studio manager 活動監視器獲取了以下螢幕截圖。這個價值讓我感到驚訝。
所以房間裡的大象。等待時間是否過長?
螢幕截圖中的鎖定等待顯示為 18,024,389 毫秒/秒,作為過去幾分鐘的最近(平均)等待時間。這意味著對於“掛鐘時間”的每一秒,查詢累積的鎖定等待時間為 18,000 秒(5 小時?!)。這非常糟糕,我想知道這是否只是活動監視器 UI 中的一個錯誤。
根據伺服器有多少核心,以及同時執行的查詢數量,即使是較小的數量(每秒鐘掛鐘時間 2.5 秒的鎖等待)也不是理想的。
這些等待可能意味著一條阻塞鏈(您可以使用它
sp_WhoIsActive
來辨識主要阻塞器,然後嘗試修復它阻塞所有內容的原因)。無論如何,它們肯定會導致您描述的這些客戶端超時 - 查詢等待鎖定的每一秒都是它在執行實際查詢時沒有取得進展的一秒。