Sql-Server
儲存過程執行時間過長
我們使用 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 伺服器有一個連結伺服器,你可以證明這一點;連接到你的“真實”伺服器,看看它執行得很快;重新連接到連結伺服器,然後再次執行,您會看到性能差異。