轻松接触DBCC CHECKDB的一些建议

在 Microsoft SQL Server 2000 中,可以在用户使用数据库时运行 DBCC CHECKDB,因为 DBCC CHECKDB 在检查每个数据库表时在表上控制的锁的类型均更改。

在 SQL Server 7.0 和早期版本中,DBCC CHECKDB(依次在数据库的每个表上运行 DBCC CHECKTABLE 和 CHECKALLOC)常常在表上控制共享锁 (S),因而阻塞了所有的数据修改语言 (DML) 语句。

在 SQL Server 2000 中,当检查表时 DBCC CHECKDB 在表上控制架构锁以防止元数据的更改,因而允许在正在检查的表上使用除任何数据定义语言 (DDL) 语句之外的 DML 语句。该变化对于决定何时运行 DBCC CHECKDB 提供了更大的灵活性,因为 DBCC CHECKDB 并不完全拒绝用户对系统的使用。

DBCC CHECKDB 是大量占用 CPU 和磁盘的操作。每一个需要检查的数据页都必须首先从磁盘读入内存。另外,DBCC CHECKDB 使用 tempdb 排序。

如果在 DBCC CHECKDB 运行时动态执行事务,那么事务日志会继续增长,因为 DBCC 命令在完成日志的读取之前阻塞日志截断。

建议在服务器负荷较少的时候运行 DBCC CHECKDB。如果在负荷高峰期运行 DBCC CHECKDB,那么事务吞吐量性能和 DBCC CHECKDB 完成时间性能都会受到影响。

要获得好的 DBCC 性能的一些建议

在系统使用率较低时运行 CHECKDB。

请确保未同时执行其它磁盘 I/O 操作,例如磁盘备份。

将 tempdb 放到单独的磁盘系统或快速磁盘子系统中。

允许 tempdb 在驱动器上有足够的扩展空间。使用带有 ESTIMATE ONLY 的 DBCC 估计 tempdb 将需要多少空间。

避免运行占用大量 CPU 的查询或批处理作业。

在 DBCC 命令运行时,减少活动事务。

使用 NO_INFOMSGS 选项显著减少处理和 tempdb 的使用。

考虑使用带有 PHYSICAL_ONLY 选项的 DBCC CHECKDB 来检查页和记录首部的物理结构。当硬件导致的错误被置疑时,这个操作将执行快速检查。

时间: 2024-08-04 06:44:36

轻松接触DBCC CHECKDB的一些建议的相关文章

SQL Server误区:使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB

误区 #27:使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB 错误 乍一看,由于BACKUP WITH CHECKSUM会检测所有分配出去的页的校验和的值,这个误区貌似是这么回事,但实际上并不是这么回事,原因如下: 由SQL Server 2000或是更早版本升上来的数据库page checksums必须开启,在开启后,并不是数据库中所有的页都会被叫上页校验和,当页损坏发生时,IO系统可不会区分损坏的页是有页校验和还是没有校验和的.所以使用BACKUP ..

使用DBCC CHECKDB手工修复数据库

alter   database   accp  set   single_user   with   rollback   immediate   go alter database  accp  set emergency go --查看数据库可疑的原因 dbcc checkdb ('accp') go ---看报什么错误,对应修复尝试 DBCC CHECKDB ('数据库 或损坏的表名', REPAIR_FAST) --重建索引并修复 DBCC CHECKDB (数据库或损坏的表名', R

DBCC CheckDB遇到a database snapshot could not be created

在备份一个客户的数据库时(数据库版本为SQL 2005 Express版本),做DBCC CHECKDB时遇到了下面错误信息:   dbcc checkdb('DB_NAME'); 消息 5030,级别 16,状态 12,第 1 行 The database could not be exclusively locked to perform the operation. 消息 7926,级别 16,状态 1,第 1 行 Check statement aborted. The database

DBCC CHECKDB 遭遇Operating system error 112(failed to retrieve text for this error. Reason: 15105) encountered

我们一个SQL Server服务器在执行YourSQLDBa的作业YourSQLDba_FullBackups_And_Maintenance时遇到了错误:   Exec YourSQLDba.Maint.ShowHistoryErrors @JobNo = 1227 <row> <ctx>yMaint.IntegrityTesting</ctx> <Sql>DBCC checkDb('xxxx') </Sql> <err>In ca

MS SQL巡检系列&amp;mdash;&amp;mdash;检查数据库上一次DBCC CHECKDB的时间

DBCC CHECKDB检查指定数据库中的所有对象的逻辑和物理完整性,具体请参考MSDN文档.我们必须定期对数据库做完整性检查(DBCC CHECKDB),以便能及时发现一些数据库损坏(Corruption)的情况.如果你的数据库长时间没有做DBCC CHECKDB,这样是做是不合理,并且很危险的.那么我们怎么检查数据库上一次做DBCC CHECKDB的时间呢? 可以通过DBCC DBINFO来获取上一次做DBCC CHECKDB时间,DBCC DBINFO (db_name) 显示数据库的结构

MSSql使用DBCC CHECKDB修复数据库或表

MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令. 1. DBCC CHECKDB 重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误. use master declare @databasehttp://www.aliyun.com/zixun/aggregation/11696.html">name varchar(255) set @data

如何大幅提高DBCC CHECKDB/DBCC CHECKTABLE的性能

随着时间的推移,数据库变的越来越大,几百个GB甚至几个TB大小的数据库越来越多.为了检查数据库的完整性,定期运行DBCC CHECKDB/CHECKTABLE是最佳实践.但是随着数据库的增大,如何缩短DBCC&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; CHECKDB/CHECKTABLE的运行时间是DBA常常需要面对的一个挑战.本短文介绍一些方法,可以大幅缩短常规CHECKDB/CHECKTALE 的运行时间

SQL Server误区30日谈 第2天 DBCC CHECKDB会导致阻塞_MsSql

误区 #2: DBCC CHECKDB会引起阻塞,因为这个命令默认会加锁 这是错误的!     在SQL Server 7.0以及之前的版本中,DBCC CHECKDB命令的本质是C语言实现的一个不断嵌套循环的代码并对表加表锁(循环嵌套算法时间复杂度是嵌套次数的N次方,作为程序员的你懂得),这种方式并不和谐,并且-..     在SQL Server 2000时代,一个叫Steve Lindell的哥们(现在仍然在SQL Server Team)使用分析事务日志的方法来检查数据库的一致性的方式重

SQL Server误区30日谈 第2天 DBCC CHECKDB会导致阻塞

误区 #2: DBCC CHECKDB会引起阻塞,因为这个命令默认会加锁 这是错误的! 在SQL Server 7.0以及之前的版本中,DBCC CHECKDB命令的本质是C语言实现的一个不断嵌套循环的代码并对表加表锁(循环嵌套算法时间复杂度是嵌套次数的N次方,作为程序员的你懂得),这种方式并不和谐,并且-.. 在SQL Server 2000时代,一个叫Steve Lindell的哥们(现在仍然在SQL Server Team)使用分析事务日志的方法来检查数据库的一致性的方式重写了DBCC C