我面臨一個問題,即運行存儲過程需要佔用太多資源,有時會導致服務器超時(特別是當CPU使用率超過90%時)。發現SQL查詢的最慢塊的最佳方法是什麼?
任何人都可以提出什麼最好和最快的方法是發現需要很多資源的塊,並且還建議一個好方法來解決它嗎?
- 我使用SQL Server 2005
我面臨一個問題,即運行存儲過程需要佔用太多資源,有時會導致服務器超時(特別是當CPU使用率超過90%時)。發現SQL查詢的最慢塊的最佳方法是什麼?
任何人都可以提出什麼最好和最快的方法是發現需要很多資源的塊,並且還建議一個好方法來解決它嗎?
您要使用的查詢分析器。 Explained here。這將向您顯示您的查詢執行路徑的圖形表示,以及它的哪些部分花費最多的時間。
如果您使用的是SQl Server Management Studio,則可以打開執行計劃以顯示有關SQL Server如何執行查詢的信息,包括每個子進程佔用整個進程的百分比。
經常這樣做時,會有一部分顯然使用大部分資源的查詢。
使用此信息,您可以就如何調整數據庫做出明智的決定。 (如添加一個索引違規桌)
如果你想知道哪一個塊是最慢的,請使用以下
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
SET STATISTICS TIME ON
運行SP時,將顯示每個查詢的統計信息。
你並不需要使用SQL Profiler來查看執行計劃 - 只是:
SET SHOWPLAN_XML ON
如果在存儲過程的語句一堆可以一個有點令人費解打開設置statistics因爲你有很多輸出塊與輸入相關聯。
SSMS中查詢計劃的圖形表示非常有用,因爲它顯示了每個語句相對於整個批次/ sproc成本的%成本。但是這是一個單一的值,所以在運行Profiler和打開語句級輸出時,它可能會更有幫助。如果您添加事件SQL:StmtCompleted和列CPU和讀取,則Profiler會爲每條語句提供單獨的IO和CPU成本。
這不是一個「答案」,但您可能會喜歡Faroult&L'Hermite的「重構SQL應用程序」一書。它會給你一些其他的想法,除了閱讀神祕的查詢計劃。 – 2011-05-06 04:52:25