Sql-Server

儲存過程執行時間過長

  • October 15, 2016

我們使用 SQL Server 2008。當我在 SQL Server Profiler 中觀看時,我發現一些查詢需要例如 20 秒。在 SQL Server Management Studio 中執行相同的查詢(在儲存過程中)需要 2 秒。當我用 20% 的記憶體和 CPU 擷取這些查詢時,SQL Server 處於負載狀態。

我可以做什麼?

將儲存過程執行時間與內聯 SQL 執行時間進行比較時要小心。

儲存過程被編譯成一個執行計劃以適應所有可能的參數。根據您的查詢,這可能不是任何參數的好計劃,而是所有參數的最差計劃。

執行內聯時,優化器可以看到查詢和參數。然後,它可以專門針對該案例制定計劃。它可以採用諸如此類的條件OR @param IS NULL並將其轉換為OR TRUE,然後能夠選擇專門適合該條件的索引和方法。

簡而言之,內聯和儲存過程可以並且確實生成具有不同性能特徵的不同計劃。

對於您的特定情況,您能否向我們展示儲存過程的定義?

我過去曾見過這種查詢計劃“大錯特錯”的情況——值得記住的是,在通過 SSMS 和應用程序(例如用 .Net 編寫的應用程序)執行此操作時,您將使用不同的查詢計劃。

如果你的 SQL 伺服器有一個連結伺服器,你可以證明這一點;連接到你的“真實”伺服器,看看它執行得很快;重新連接到連結伺服器,然後再次執行,您會看到性能差異。

引用自:https://dba.stackexchange.com/questions/9167