Sql-Server
測試時使用記憶體數據執行儲存過程不佳
我有一個儲存過程,第一次執行大約需要 15 秒,後續執行需要 1 到 2 秒。如果我等待一個小時並再次執行它,那麼它又需要 15 秒。
我猜它在隨後的執行中使用緩衝池中的記憶體數據,而第一次它必須將數據從磁碟載入到緩衝池。我正在嘗試調整此儲存過程,但在第一次執行後我無法測試我的更改,因為它只需要 1 到 2 秒。
我知道我可以使用該
DBCC DROPCLEANBUFFERS
命令來釋放記憶體並執行我的儲存過程,但是我不允許在工作中清除記憶體。我也試過WITH RECOMPILE
了,但這只會創建一個新計劃,但仍然使用記憶體的數據。是否有另一種強制儲存過程不使用記憶體數據的方法?
否。保存 CPU 並等待實際執行計劃中的統計資訊,您會看到 15 秒的持續時間。然後儘量減少 CPU 和讀取。如果您看到 X 讀取 = 15 秒的 PAGEIOLATCH 等待,那麼您可以合理估計減少讀取的影響。
重要的是發現並修復導致緩衝池流失的查詢。您的查詢可能至少部分歸咎於您,但您需要找出為什麼此查詢的數據沒有保留在記憶體中。可能是其他查詢,可能需要更多記憶體,或者更好的壓縮,或者避免表掃描等。