sp_WhoIsActive 等待資源
我在 SQL Server 2016 中有一個巨大的查詢——當我對記錄子集執行查詢時,它會在 15 分鐘內完成。當我將其推斷為記錄總數時,它應該在 1 小時內完成。但即使在 3 小時後它也不完整。當我檢查時
master.sys.sysprocesses
,有一個 CXPACKET 等待,等待時間為 10293331SELECT waittime, waittype, lastwaittype, open_tran, cpu, physical_io, [sid], loginame, [sql_handle] FROM master.sys.sysprocesses WHERE SPID=58
注意:我做了 exec
sp_Who2
來獲得特定的 SPID=58從如何使用 sp_WhoIsActive 查找慢速 SQL Server 查詢
@get_task_info = 2 – 如果查詢已並行,並且您正在排除 CXPACKET 等待問題,您可以確定查詢中的每個任務正在等待什麼。
我用@get_task_info = 2 執行了 sp_WhoIsActive。
wait_info
給出以下內容:(5x: 68/168850/635541ms)CXPACKET:15, (3x: 3/16/32ms)CXPACKET:7, (1x: 10207374ms)CXPACKET:1
如何從這些資訊中確定每個任務正在等待什麼?
更新
這個問題更多是關於找到一種“方法”來找出等待資源(使用 sp_WhoIsActive 或類似的),而不是通過添加 MAXDOP 或分析執行計劃來實際解決目前的性能問題。
這個問題更多是關於找到一種“方法”來找出等待資源(使用 sp_WhoIsActive 或類似的),而不是實際解決目前的性能問題
如果您正在尋找這些數字的含義,請查看sp_whoisactive 文件。
從 Adam Machanic 的CXPACKET 節點標識符頁面中,您可以在輸出中看到這一行:
(5x: 68/168850/635541ms)CXPACKET:15
(3x: 3/16/32ms)CXPACKET:7
(1x: 10207374ms)CXPACKET:1
意味著有
- 在執行計劃的節點 15 中等待 CXPACKET 的 5 個任務
- 在執行計劃的節點 7 中等待 CXPACKET 的 3 個任務
- 5 個任務在執行計劃的節點 1 中等待 CXPACKET
此處記錄了由斜線分隔的 3 個數字:
(Nx:MINms/AVGms/MAXms)
$$ wait_type $$其中Nx是任務數,MINms是任務的最短等待時間,AVGms是任務的平均等待時間,MAXms是任務的最長等待時間
的輸出
@get_task_info = 2
告訴你
- 您的查詢在執行計劃中的確切位置卡住了
- 有多少任務卡在那裡,以及
- 他們被困在那裡多長時間(最小,最大和平均)
希望這為您提供了足夠的資訊,以便您能夠找到查詢的哪一部分卡在這些並行等待中,以便您可以進一步調查。