天天看點

如何偵查SQL執行狀态引出問題分析問題解決問題補充說明

随着菜鳥一點點的成熟,現在老鳥已經開始慢慢的将一些問題抛給他:“菜鳥,你去研究下如何有效而快捷的偵查sql執行狀态?”。

“鳥哥,你交代的任務,我分分鐘就去辦。”,菜鳥領了任務趕緊忙碌起來。

“其實這個場景經常遇到,比如:我們想知道某個程序的sql查詢執行到哪一步了?目前執行多久了?查詢是從哪個登入使用者哪一個機器過來的?跑的是什麼業務?甚至執行計劃是什麼樣子?老鳥就是老鳥,總想的比我們遠”。菜鳥一邊尋思着,一邊又馬不停蹄的問g哥,終于功夫不負有心人,總算有了點眉目。

利用一系列的常見系統視圖就可以很輕松的解決這個問題:

sys.dm_exec_requests:這個動态視圖可以拿到所有于執行請求的資訊

sys.dm_exec_sql_text:這個動态視圖可以拿到執行的語句和目前執行的語句

sys.dm_exec_query_plan:這個動态視圖可以拿到執行計劃

跑在59号程序的測試代碼

偵查59号程序的代碼如下:

執行結果如下(人為分成兩段):

如何偵查SQL執行狀态引出問題分析問題解決問題補充說明
如何偵查SQL執行狀态引出問題分析問題解決問題補充說明

當然我們也可以使用上一篇文章講到的sql profiler工具。但是,這種方法有個典型的缺點是對被跟蹤的sql server伺服器性能影響較大,不如使用動态視圖來得簡單友善快捷。