Freigeben über


SQL Server 2008 R2提高DBCC CHECKDB速度的trace flags

 DBA的头痛的一个问题是, 如果数据库很大,比如几百GB, 几个TB,那么DBCC CHECKDB可能需要很长时间如几个小时甚至整天. 尽管CHECKDB可以在线运行,但其会影响磁盘性能,如何缩短CHECKDB的时间对于一个繁忙的服务务器还是很重要。

 

在SQL 2008 R2 中新增了两个trace flag, 可以用来提高CHECKDB的速度。一个是2549,一个是2562,下面的文档有具体描述:

 

2634571  Improvements for the DBCC CHECKDB command may result in faster performance when you use the PHYSICAL_ONLY option

https://support.microsoft.com/default.aspx?scid=kb;EN-US;2634571

 

这两个trace flag的都是用来充分利用IO的处理能力的。缺省情况下,DBCC CHECKDB为了避免过度使用TEMPDB以及磁盘资源,它会逐批处理数据库的index。 新的trace flag会改变这个行为,这样它不再分批处理。这样对磁盘的读写就多了,如果磁盘购快,CHECKDB就快了。

 

Trace flag 带来的另外一个改变就是, 缺省情况下,CHECKDB会并发读写文件,如果他们位于不同的磁盘上。有了trace flag, 即便文件处于同一个盘符下面,SQL server 也把它们当作位于不同的磁盘上。这对于磁盘是 mount point 的情况特别有用。比如你有5个磁盘都是mount point的, 挂在F:盘下的不同目录。这种情况下SQL  server就可以把它们当作真正的不同的物理盘。

 

根据一些测试,这两个trace flag能够提高大概20%~50%的速度。不过, 只有在使用 PHYSICAL_ONLY的情况下。实际上在我的服务器上,我测试下来,缩短的时间并使很明显。大概15%左右。 这个估计和我的PC不是真的服务器,所以并发能力不高有关。

 

这两个trace flag需要在R2 CU11 或者R2 SP1 CU4 中才有效。