[英]For long stored procedures, how to quickly identity the most time-consuming part?
有時我們需要處理長存儲過程,以使其運行更快。 快速識別代碼中最慢的部分的最佳方法是什么? 對我來說,我只需在存儲過程中添加一些PRINT
語句並運行它,然后我就可以發現哪一部分比較慢。 我想知道還有其他替代方法嗎?
對於我來說,和您幾乎一樣,只需將過程各部分的開始時間和結束時間插入日志表,然后檢查記錄。 打印只是幫助您檢查1次。 日志表可以幫助您查看該過程是否出現問題。
使用“執行計划”執行該過程。 這將幫助您確定過程的哪個部分花費更多時間。 它還會建議您是否需要添加任何索引。
在“ SQL Server Management Studio”中執行腳本之前,選擇“包括實際執行計划”或使用Ctrl + M,然后運行“腳本/過程”調用。
在執行計划窗口(結果選項卡旁邊)中,您可以詳細查看和分析它。
同意拉斐爾。 特別:
--initialise
DELETE FROM DB..Perf_Log;
DECLARE @lastTime datetime
set @lastTime=getdate()
/* do some shit */
--add this block after each big block of functionality that you want to test
insert into DB..Perf_Log values ('did some stuff 1',datediff("MILLISECOND",@lastTime,getdate()))
set @lastTime=getdate()
這樣,即使存儲的過程需要一段時間才能運行,您也可以立即查看是什么原因導致了該問題。 即使存儲的過程遇到障礙也很有用,因為您可以看到最后成功的事情是什么。 祝好運。
使用SQL事件探查器連接並觀察每個語句及其時間。
使用以SP:開頭的事件進行觀察,但請注意Profiler會對性能產生影響。
https://dba.stackexchange.com/questions/29284/how-to-profile-stored-procedures
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.