MSSQLSERVER_9017
適用於:SQL Server
詳細資料
屬性 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 9017 |
事件來源 | MSSQLSERVER |
元件 | SQLEngine |
符號名稱 | LOG_MANY_VLFS |
訊息文字 | 資料庫 %ls 有超過 %d 個虛擬記錄檔,這是過多的。 太多虛擬記錄檔可能會導致啟動和備份時間過長。 請考慮壓縮記錄,並使用不同的成長增量來減少虛擬記錄檔的數目。 |
說明
在資料庫啟動期間,SQL Server 會偵測到資料庫有大量的 虛擬記錄檔 (VFS),並記錄此錯誤訊息。 您可能會遇到錯誤的情況如下:
- 當您啟動 SQL Server 實例時
- 還原資料庫
- 附加資料庫
與這個範例類似的 9017 資訊訊息會記錄在 SQL Server 錯誤記錄檔中:
Database dbName has more than n virtual log files which is excessive. Too many virtual log files can cause long startup and backup times. Consider shrinking the log and using a different growth increment to reduce the number of virtual log files. Too many virtual log files can adversely affect the recovery time of the database.
此外,如果您在環境中使用複寫、資料庫鏡像或 AlwaysOn 技術,您可能會注意到這些技術的效能問題。
許多 VDF 對復寫的影響
太多記錄檔可能會影響複寫,因為記錄讀取器進程必須掃描每個虛擬記錄檔中標示要復寫的交易。 您可以追蹤sp_replcmds預存程式的效能來查看此行為。 記錄讀取器進程會使用sp_replcmds預存程式掃描虛擬記錄檔,以及讀取標示為複寫的交易。
原因
當您為事務歷史記錄檔指定 FILEGROWTH 參數的小型值時,就會發生此問題。
SQL Server 資料庫引擎 內部會將每個實體記錄檔分割成數個虛擬記錄檔(VFS)。 SQL Server 2008 R2 Service Pack 2 引進了資料庫啟動時記錄的新訊息 (9017)(可能是因為 SQL Server 實例的啟動或還原 資料庫的 和 SQL Server 2008 R2 中有超過 1,000 個 VLF,或 SQL Server 2012 和更新版本中有超過 10,000 個 VLFS。
注意
在 SQL Server 2012 中,雖然當資料庫有 10,000 個 VDF 時,會記錄此訊息,但錯誤記錄檔中報告的實際訊息錯誤指出 “1000 VLF”。警告會在 10,000 個 VLF 之後發生。 不過,訊息會報告 1,000 個 VDF。 此問題已在更新版本中修正。
使用者動作
若要解決此問題,請遵循下列步驟:
您可以使用此查詢來檢視 SQL Server 上的 VLF 計數和平均大小。 結果將協助您識別要專注於哪些資料庫:
SELECT db.name, count(dbl.database_id) as Total_VLF_count, convert(decimal (10,2), avg(dbl.vlf_size_mb)) as Avg_VLF_Size_MB FROM sys.databases db CROSS APPLY sys.dm_db_log_info(db.database_id) dbl GROUP BY db.name ORDER BY Total_VLF_count DESC
如需詳細資訊,請參閱 sys.dm_db_log_info。
使用 DBCC SHRINKDB/DBCC SHRINKFILE 或使用 SQL Server Management Studio 減少事務歷史記錄。
執行事務歷史記錄檔大小的一次性增加為大型值。 此單次增加是為了避免頻繁的自動成長而完成。 如需詳細資訊,請參閱 管理事務歷史記錄檔的大小。
將 FILEGROWTH 參數增加為大於目前設定的值。 這應該以資料庫的活動以及記錄檔成長的頻率為基礎。
此外,您可以檢閱下列修正文章,視您目前執行的 SQL Server 版本而定:
修正:在 SQL Server 2008 R2、SQL Server 2008 或 SQL Server 2012 中還原資料庫需要很長的時間
修正:如果您在 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 中的事務歷史記錄中有許多 VDF,復原資料庫時效能變慢
提示
若要判斷指定執行個體中所有資料庫的目前交易記錄大小的最佳 VLF 分佈,以及達到所需大小的必要成長增量,請參閱此指令碼。