天天看點

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

第一步建庫

第二步建立sp_who3存儲過程

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

View Code

第三步建立[usp_checkElapsedHighSQL]存儲過程

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

第四步建立[usp_Resettbname]存儲過程 

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

第五步建立AutocaptureElapsedHighSQL作業

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

第六步建立ResetcheckElapsedHighSQLtbname作業

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

原了解釋:

AutocaptureElapsedHighSQL作業每隔一分鐘調用[usp_checkElapsedHighSQL]存儲過程,而[usp_checkElapsedHighSQL]存儲過程又會調用

sp_who3存儲過程擷取一些目前線上環境的資訊,被記錄到[ElapsedHigh]表裡

ResetcheckElapsedHighSQLtbname作業會在每天的23點59分執行,調用[usp_Resettbname]存儲過程, [usp_Resettbname]存儲過程會将[ElapsedHigh]表

的表名修改為:表名+當天日期,例如:ElapsedHigh2015-6-19 ,這樣就進行了歸檔

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

[usp_checkElapsedHighSQL] 存儲過程有兩種調用方式,一種是傳入NULL,那麼[usp_checkElapsedHighSQL] 存儲過程就會抓取最耗時的那個session

如果傳入spid,那麼就會顯示那個spid的session

效果

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享
SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

可以看到,參數也能抓取到,一般依靠sys.dm_exec_sql_text視圖和sys.[fn_get_sql]()視圖是無法擷取到參數的

SQL Server profiler也是,它是整個RPC和Statement去抓

而且還會抓取當時的XML執行計劃,點選它就能顯示圖形化的執行計劃,這樣對分析當時語句的執行情況非常有幫助

SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享SQL Server定時自動抓取耗時SQL并歸檔資料腳本分享

如有不對的地方,歡迎大家拍磚o(∩_∩)o