mssql sqlserver dbcc checkdb操作很慢的处理方法


摘要:
最近在做数据库检查时,执行dbcc checkdb操作时,发现速度异常慢,
以前dbcc checkdb()操作,只需5分钟,最近运行dbcc checkdb()需要近30分钟,速度慢了整整6倍。
当前环境:sql server 2016


当客户第一时间反馈这个问题时,我首先检查服务器内部是否有进程阻止此操作的进行,导致dbcc checkdb运行变慢
—————————————
当我帮助他们设置DBCC CHECKDB时,我发现客户有16个逻辑处理器。
对他们的系统进行适当的分析后,我支持他们将最大并行度设置为2.

现在,接下来的事情是设置DBCC CHECKDB,并且在对它们的数据库进行了很多测试之后,我确定使用8个逻辑处理器运行它们的DBCC CHECKDB是最佳的。
我发现当我运行带有所有16个逻辑处理器的DBCC CHECKDB时,运行8个逻辑处理器的运行效果并不理想。运行这个测试后,我为他们的DBCC CHECKDB编写了以下命令。

DBCC CHECKDB ([数据库名称])
WITH MAXDOP = 8;
go

错误产生的原因:
有同事看见 maxDOP =8 ,由于系统有16个处理器,所以修改为 maxDop =16 导致配置发生变化,运行速度大大降低
——————–
如果你想让查询与所有可用的处理器一起运行,我建议你按照以下脚本中的描述运行WITH MAXDOP = 0的命令。

DBCC CHECKDB ([数据库名称])
WITH MAXDOP = 0;
go