Sql-Server

哪些 SET 選項會影響計劃重用以及如何在 T-SQL 中獲取它們的值?

  • April 17, 2016

我正在對儲存過程在任何時候從管理工作室執行良好的情況進行故障排除,但是相同的儲存過程在其中一個網路伺服器中執行得非常糟糕,即使對於相同的參數也是如此。可能有一些原因導致這種情況,包括阻塞等。

我想排除使用不同 SET 選項創建 2 個不同計劃的可能性,並且其中至少一個計劃是使用產生錯誤計劃的參數組合進行優化的。

引用本傑明·內瓦雷斯的話:

“一般來說,查詢優化是一項昂貴的操作,為了避免這種優化成本,計劃記憶體會盡量將生成的執行計劃保存在記憶體中,以便它們可以重複使用。但是,如果一個新的連接執行相同的儲存過程有不同的SET選項,它可能會生成一個新的計劃而不是……”

為了解決這個問題,我想要一個 T-SQL 查詢,它可以顯示為會話設置的所有值。

這可能嗎?

以下 SET 選項會影響執行計劃的重用:

(他們中的一些)

DATEFORMAT

LANGUAGE

NUMERIC_ROUNDABORT

FORCEPLAN

如果是不同選項導致使用不同計劃的情況,只需使用sys.dm_exec_plan_attributes檢查選項。如果一個好計劃和一個壞計劃的選項不同,那可能就是原因。

可以在Martin Smith的以下答案中找到計劃記憶體鍵列表:

什麼會導致參數嗅探一台電腦而不是另一台電腦?

為了解決這個問題,我想要一個 T-SQL 查詢,它可以顯示為會話設置的所有值。

查看目前會話的 SET 選項:

SELECT * FROM sys.dm_exec_sessions;

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