SQL Server 监控磁盘IO错误,msdb.dbo.suspect_pages
suspect_pages表位于msdb数据库中,是在SQLServer2005中引入的。用于维护有关可疑页的信息的suspect_pages
数据库管理员负责管理表(主要通过删除旧的行实现)。suspect_pages表有大小限制,如果此表已满,则不会记录新的错误。若要防止此表填满,数据库管理员或系统管理员必须通过删除行来手动清除此表中的旧条目。因此,我们建议您定期删除或存档event_type为已还原或已修复的行或具有旧last_update值的行。
若要监视对suspect_pages表执行的操作,可使用DatabaseSuspectDataPage事件类。有时会因存在暂时性的错误向suspect_pages表添加行。如果正在向该表添加很多行,则I/O子系统可能出了问题。如果您注意到正向该表添加的行数突然增加,我们建议您检查一下I/O子系统是不是出现了问题。
下表显示了记录在suspect_pages表的event_type列中的错误。
由操作系统CRC错误造成的823错误,或者校验和错误或页撕裂以外的824错误(例如,页ID错误) 1 错误的校验和 2 残缺页 3 已还原(页在标记为错误后已还原) 4 已修复(DBCC修复了页) 5 已由DBCC释放 7
错误说明
event_type值
暂时性的错误也会记录在suspect_pages表中。暂时性错误的来源包含I/O错误(例如电缆断开连接)或暂时未通过重复校验和测试的页。
数据库引擎如何更新suspect_pages表
数据库引擎对suspect_pages表执行下列操作:
如果表未满,则每出现一个824错误,该表都会更新以指明出现了错误,且错误计数器也将相应递增。
如果通过修复、还原或释放操作修复后的页仍有错误,则其number_of_errors计数将会递增,其last_update列也会更新
列出的页通过还原或修复操作修复之后,该操作将更新suspect_pages行,以指示此页已修复(event_type=5)或已还原(event_type=4)。
如果运行DBCC检查,则该检查会将所有未出错页标记为已修复(event_type=5)或已释放(event_type=7)。
自动更新suspect_pages表
尝试读取数据文件中的某一页由于以下原因之一失败后,数据库镜像伙伴将更新suspect_pages表。
由操作系统CRC错误导致的823错误。
824错误(像页撕裂这样的逻辑损坏)。
以下操作将自动从suspect_pages表中删除行。
ALTERDATABASEREMOVEFILE
DROPDATABASE
DBCCCHECKDBREPAIR_ALLOW_DATA_LOSS更新suspect_pages表,以指示已释放或已修复的各页。
RESTORE也可更新该列表。完整还原、文件还原或页面还原将页面项标记为已还原。