預存程序的效能差異:SqlCommand 與SSMS
預存程序的執行時間在SQL Server Management Studio 之間可能有顯著差異( SSMS)和System.Data.SqlClient.SqlCommand,即使沒有參數嗅探。根本原因可能在於每個執行環境啟用的 SET 選項不同。
透過使用 SQL Server Profiler,發現 SSMS 執行了 .NET Sql Client Data Provider 省略的多個 SET 指令。這些 SET 選項可以影響查詢計劃和效能。在這種情況下,作為罪魁禍首出現的一個關鍵SET 選項是:
SET ARITHABORT ON
啟用此SET 選項時,使用算術運算的查詢可能會導致溢位、除以零或其他異常情況會提前停止。此行為與 SET ARITHABORT OFF 的預設設定不同,後者允許發生異常。
因此,預存程序的執行計劃和效能可能會受到 SET ARITHABORT 選項的影響。如果預存程序中的算術運算受此設定的影響,則可能會導致 SSMS 和 SqlCommand 之間的執行時間差異。
為了緩解此問題,建議仔細檢查應用程式使用的 SET 選項連接到 SQL Server。透過在 SqlCommand 中使用與 SSMS 使用的相同的 SET 選項,可以避免效能不一致。此外,利用 SQL Server Profiler 識別活動 SET 選項是一種很有價值的偵錯技術。
其他因素,例如連接字串參數、事務行為和 MARS(多個活動結果集)設置,也會影響效能並應被視為潛在的影響因素。
以上是為什麼我的預存程序在 SSMS 中比在 SqlCommand 中運行得更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!