Sql-Server

測試時使用記憶體數據執行儲存過程不佳

  • August 20, 2022

我有一個儲存過程,第一次執行大約需要 15 秒,後續執行需要 1 到 2 秒。如果我等待一個小時並再次執行它,那麼它又需要 15 秒。

我猜它在隨後的執行中使用緩衝池中的記憶體數據,而第一次它必須將數據從磁碟載入到緩衝池。我正在嘗試調整此儲存過程,但在第一次執行後我無法測試我的更改,因為它只需要 1 到 2 秒。

我知道我可以使用該DBCC DROPCLEANBUFFERS命令來釋放記憶體並執行我的儲存過程,但是我不允許在工作中清除記憶體。我也試過WITH RECOMPILE了,但這只會創建一個新計劃,但仍然使用記憶體的數據。是否有另一種強制儲存過程不使用記憶體數據的方法?

否。保存 CPU 並等待實際執行計劃中的統計資訊,您會看到 15 秒的持續時間。然後儘量減少 CPU 和讀取。如果您看到 X 讀取 = 15 秒的 PAGEIOLATCH 等待,那麼您可以合理估計減少讀取的影響。

重要的是發現並修復導致緩衝池流失的查詢。您的查詢可能至少部分歸咎於您,但您需要找出為什麼此查詢的數據沒有保留在記憶體中。可能是其他查詢,可能需要更多記憶體,或者更好的壓縮,或者避免表掃描等。

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