觸發緩衝池掃描的作業可能會在大型記憶體計算機上執行緩慢
本文說明在大型記憶體計算機上掃描 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 | 1308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
注意事項
閾值在 XEvent 中較小,可讓您以更細微的粒度擷取資訊。
因應措施
在 2022 SQL Server 之前,無法排除此問題。 不建議執行任何動作來清除緩衝池,因為從緩衝池卸除 DBCC DROPCLEANBUFFERS) ( 清除緩衝區可能會導致效能大幅降低。 從記憶體中移除資料庫頁面會導致後續的查詢執行從磁碟上的資料庫檔案重新讀取數據。 透過磁碟 I/O 存取資料的這個程式會導致查詢變慢。
在 SQL Server 2022 年,因為緩衝池掃描是利用多個核心平行處理,所以這個問題已減輕。 每8百萬個緩衝區會有一個工作, (64 GB) 如果緩衝區少於8百萬個,則仍會使用序列掃描。 如需詳細資訊,請 watch 緩衝池平行掃描。
其他相關資訊
如需大型緩衝池中可能發生之問題的詳細資訊,請參閱 SQL Server:大型 RAM 和資料庫檢查點檢查。