簡體   English   中英

對於長存儲過程,如何快速識別最耗時的部分?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM