Sql-Server

清除計劃記憶體後如何重新生成執行計劃?

  • January 5, 2017

清除 SQL Server 上的計劃記憶體後,如何在不執行儲存過程本身的情況下重新生成儲存過程的執行計劃?

今天早上我更新統計數據時,我的一個儲存過程執行得很慢。根據一些 google-fu,我發現清除計劃記憶體可以解決問題 - 確實如此。但是,如果我必須再次執行此操作,我想避免在使用者等待響應時重新生成計劃對性能造成影響。

SQL Server 的版本/版本是 2016 Enterprise。

清除 SQL Server 上的計劃記憶體後,如何在不執行儲存過程本身的情況下重新生成儲存過程的執行計劃?

你不/不能。執行計劃是在執行對象時生成的。如果您想要計劃記憶體中的計劃,則必須執行該對象。但是,假設儲存過程至少有一個輸入參數,您將需要使用一個可能代表大多數情況的值,否則您可能會強制將非理想/“壞”計劃放入記憶體中。

如果我必須再次執行此操作,我想避免在使用者等待響應時重新生成計劃對性能造成影響。

您最好接受性能損失,因為您無法保證計劃在第一個人使用它時仍然在記憶體中。如果 SQL Server 決定它需要更多記憶體用於其他操作,則可以刪除計劃。所以如果它在第一個人使用它之前就被丟棄了,你什麼也沒保存,現在導致伺服器生成兩次計劃。

此外,這只是第一次成功。當您試圖利用它來“預”記憶體它時,您會意識到這一點。但這也意味著它只會是第一個第一次受到輕微性能影響的使用者。在那之後,只要不放棄該計劃,其他人無論如何都不會遇到性能損失。

為自己節省大量浪費的時間/精力,並且不用擔心預記憶體。更多地擔心儲存過程中查詢的性能問題,這些問題每次都會影響所有使用者,並明智地花時間改善這些問題點。

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