Sql-Server

突然 SQL 伺服器重新啟動,掛起的任務計數增加

  • September 23, 2020

我們正在嘗試了解 SQL 伺服器突然自行重啟的問題 -

它是一個 SQL server 2012 SP4 -GDR 應用,啟用了 40 個 CPU 的 HT,因此總共有 80 個邏輯處理器-

MAXDOP=8 , CTOP 5

從我們發現的錯誤日誌中

/**********************/

BEGIN 堆棧轉儲

非屈服調度程序 /**********************/

僅在重新啟動 SQL 時出現錯誤消息。也沒有像檢查那樣創建迷你轉儲。

是的,當時我們有很多查詢正在執行。前 3 名等待是:-

1.TranLogIO
2.CXPACKET
3.PAGELATCH SH

然而,我們也注意到SOS WORKER從系統健康 XE 收集的等待呼叫,我相信這不過是THREADPOOL. 因此,我進一步分析了該系統執行狀況中的查詢處理詳細資訊,並發現在未產生調度程序錯誤時記錄了以下錯誤

19:46 maxworkers- 2944 workers created789 oldest pending taskwait time0 待定任務 4

19:51 maxworkers- 2944 workers created982 oldest pending taskwait time256987 待定任務 165

在 19:51,我們開始看到重啟發生了。

問題是如果上述計算中仍有近 2000 個工作人員可用,為什麼會有執行緒池等待。另外,當查詢有這麼多調度程序可供執行並完成對在 CXPACKETS 上等待的一堆查詢的請求時,為什麼那些待處理的任務計數為 165?

編輯:更新我的問題以等待 XE

SOS_MEMORY_TOPLEVELBLOCKALLOCATOR

當我閱讀上面的資訊時,請在這裡等待https://www.sqlskills.com/help/waits/sos_memory_toplevelblockallocator/

根據部落格,在 SP3 CU 中有一個修復,但使用 TF T8075:我目前使用的是 SP4-GDR 最新更新檔,是否仍需要應用 TF,儘管我沒有看到Failed allocate pages: FAIL_PAGE_ALLOCATION 513錯誤日誌中的任何消息

不確定它是否有幫助-我看到總伺服器記憶體不時下降一個演出,然後匹配到目標伺服器記憶體,即 = 最大伺服器記憶體 (750GB)

大多數時候總=目標=最大伺服器記憶體。滴水只是演出而已,並不多

記憶體資訊 = 總記憶體:880 GB 最大記憶體:750GB 最小伺服器記憶體:130 GB 它是一個 2 節點 Windows 集群,沒有共享其他 SQL 實例。資源調控器未啟用

謝謝

我首先要說分析 MS 人員或了解它的人中轉儲的最佳人選。我只想從您發布的日誌中指出一些基礎知識

在 19:46 maxworkers- 2944 個工作人員創建了 789 個最舊的待處理任務等待時間 0 待處理任務 4 在 19:51 maxworkers- 2944 個工作人員創建了 982 個最舊的待處理任務等待時間 256987 待處理任務 165

請看那個taskwait time 256987pending task 165。這意味著調度程序已掛起,並且有 165 個任務正在等待它獲取調度程序並執行。在這種情況下,MS SQL Server 無法擺脫這個掛起的調度程序場景並等待了一段時間,但它再次決定最好重新啟動自己以擺脫這個掛起的調度程序場景,因此它重新啟動。現在,它掛起的原因超出了我的能力範圍,您發布的資訊無法說明。

另請注意,為執行緒分配了一個調度程序,它應該在該調度程序上執行,這就是為什麼有這麼多執行緒在這個掛起的調度程序上等待。

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