觸發緩衝池掃描的作業可能會在大型記憶體計算機上執行緩慢
本文說明掃描 SQL Server 緩衝池可能需要很長的時間才能在大型記憶體計算機上完成。
適用於:SQL Server
原始 KB 編號: 4566579
徵兆
Microsoft SQL Server 中的某些作業會觸發緩衝池的掃描(將資料庫頁面儲存在記憶體中的快取)。 在具有大量 RAM(1 TB 或更大記憶體)的系統上,掃描緩衝池可能需要很長的時間。 這會讓觸發掃描的作業變慢。
造成緩衝池掃描的作業
以下是可能會觸發緩衝池掃描的一些作業:
- 資料庫啟動
- 資料庫關機或重新啟動
- AG 故障轉移
- 資料庫移除(卸除)
- 從資料庫移除檔案
- 完整或差異資料庫備份
- 資料庫還原
- 事務歷史記錄還原
- 在線還原
DBCC CHECKDB
或DBCC CHECKTABLE
作業
錯誤記錄檔顯示掃描花費很長的時間
從 SQL Server 2016 SP3、 SQL Server 2017 CU23 和 SQL Server 2019 CU9 開始,SQL Server 錯誤記錄 檔中已新增錯誤訊息,指出緩衝池掃描花費很長的時間(10 秒或更長):
緩衝池掃描花費 14 秒:資料庫標識碼 7、命令 'BACKUP DATABASE'、作業 'FlushCache'、掃描的緩衝區 115、匯總的緩衝區204640239,等候時間 0 毫秒。 如需詳細資訊,請參閱 'https://go.microsoft.com/fwlink/?linkid=2132602'。
擴充事件以診斷長時間掃描
此外,從相同的 SQL Server 2016 SP3、 SQL Server 2017 CU23 和 SQL Server 2019 CU9 開始,引進了buffer_pool_scan_complete 擴充事件,以協助您識別長緩衝池掃描。
如果掃描需要超過 1 秒,則會在啟用事件時記錄 XEvent,如下所示。
NAME | database_id | elapsed_time_ms | 命令 | 作業 | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1,308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
注意
臨界值在 XEvent 中較小,可讓您以更精細的數據粒度擷取資訊。
因應措施
在 SQL Server 2022 之前,沒有辦法消除這個問題。 不建議執行任何動作來清除緩衝池,因為從緩衝池卸除清除清除緩衝區 (DBCC DROPCLEANBUFFERS) 可能會導致效能大幅降低。 從記憶體中移除資料庫頁面會導致後續的查詢執行從磁碟上的資料庫檔案重新讀取數據。 透過磁碟 I/O 存取資料的這個程式會導致查詢變慢。
在 SQL Server 2022 中,此問題會因使用多個核心來平行處理緩衝池掃描而減輕。 每個 800 萬個緩衝區 (64 GB) 會有一項工作,如果緩衝區少於 800 萬個,則仍會使用序列掃描。 如需詳細資訊,請觀看 緩衝池平行掃描。
其他相關資訊
如需大型緩衝池中可能發生問題的詳細資訊,請參閱 SQL Server:大型 RAM 和 DB 檢查點。