msdb.dbo.suspect_pages 是 SQL Server 2005 引入的系統表,專門記錄資料頁面讀取時偵測到的可疑錯誤 (823/824/校驗和/頁面撕裂)。本文完整解析欄位含義、錯誤類型代碼、引擎自動更新機制、DBA 維護最佳實務與監控建議。
| 欄位 | 說明 |
|---|---|
| database_id | 資料庫 ID |
| file_id | 檔案 ID |
| page_id | 頁面 ID |
| event_type | 錯誤類型代碼 (見下表) |
| error_count | 同一頁面累積錯誤次數 |
| last_update_date | 最後記錄更新時間 |
| event_type | 錯誤說明 | 嚴重度 |
|---|---|---|
| 1 | 823 錯誤 (OS CRC) 或非 824 的 824 錯誤 (如頁 ID 錯誤) | 高 |
| 2 | 錯誤的校驗和 (Bad Checksum) | 高 |
| 3 | 殘缺頁 | 高 |
| 4 | 已還原 (頁面在標記錯誤後已透過還原修復) | 資訊 |
| 5 | 已修復 (DBCC 修復了頁面) | 資訊 |
| 7 | 已由 DBCC 釋放 | 資訊 |
error_count 遞增。event_type = 4/5/7。DBCC CHECKDB → 將無錯誤頁標記為 5 (已修復) 或 7 (已釋放)。ALTER DATABASE REMOVE FILEDROP DATABASEDBCC CHECKDB REPAIR_ALLOW_DATA_LOSS → 更新為 7 (已釋放) 或 5 (已修復)RESTORE (完整/檔案/頁面還原) → 更新為 4 (已還原)表有大小上限 (預設可容納數千列),滿後不再記錄新錯誤。建議定期清理:
-- 清理已修復/已還原且超過 30 天的記錄
DELETE FROM msdb.dbo.suspect_pages
WHERE event_type IN (4, 5, 7)
AND last_update_date < DATEADD(DAY, -30, GETDATE());
-- 偵測近 1 小時新增記錄數暴增
SELECT COUNT(*) AS 新增筆數
FROM msdb.dbo.suspect_pages
WHERE last_update_date > DATEADD(HOUR, -1, GETDATE());
若短時間大量新增,強烈建議檢查 I/O 子系統 (磁碟、控制器、纜線、驅動程式)。
database_suspect_data_page 即時捕獲新增記錄。823、824 設定郵件通知。I/O 暫時性故障 (如纜線鬆動、控制器重置) 也會記錄。若同一頁面重複出現,則可能為持久性硬體問題。
suspect_pages 是 SQL Server 內建的「磁碟健康監測器」。DBA 應建立例行檢視機制,將其納入每日巡檢清單,並在發現異常時優先排查儲存層硬體與驅動程式,避免資料損壞擴大。