我在我们的OLTP环境中打开DBCC (SQL 2005,2008)。系统开销在我们的服务器上是一个非常明显的东西,所以我希望它们尽可能的高效。因此-我想打开NOINDEX选项,这是我以前从未使用过的选项。我的想法是:如果在完整性检查之外检测到的索引有问题,我可以重新构建索引。此外,完整性检查的持续时间将大大缩短,并将检测到更严重的腐败。
我的计划有什么缺点?
谢谢,黛布
发布于 2010-11-19 17:53:46
需要在非工作时间或低使用率下完成。在一个巨大的数据库上,它将(从设计上)严重地冲击服务器的磁盘子系统,以至于它几乎无法使用。它需要读取数据库中的每一页。使用NOINDEX选项对您没有多大帮助,因为您需要检查(可重新构建的)索引中没有一个是损坏的。如果其中一个已损坏,则可以将错误返回到您的应用程序或内部过程/事务。如果应用程序代码或过程没有正确处理所有这些错误(即正确回滚嵌套事务),则可能导致逻辑数据损坏(例如,在会计系统中没有贷方的借方)。
我们每周在周日凌晨对所有数据库进行CHECKDB,因为那时的使用率非常低。对于我们最大和使用最多的24x7操作,我们运行,而不是在表之间运行WAITFOR,以最小化最终用户的影响。如果使用此路由,还需要定期在数据库上运行DBCC和(这些都包含在完整的CHECKDB中)。
最后,如果您在Server数据库中遇到任何形式的损坏,则需要立即查看存储硬件堆栈。从上世纪90年代的SQL6.5开始,我们就没有见过任何类型的DB损坏,我们有几十台大容量的SQL服务器。我在SQL 7和更高版本中看到DB损坏的唯一一次是因为客户站点上有一个错误的RAID控制器(允诺真的很糟糕)。
发布于 2010-11-19 17:53:38
没有任何缺陷,但您面临的风险是,非聚集索引中的完整性故障可能会影响最终用户或应用程序,您不会丢失任何数据,但在重新构建索引时可能会产生影响。
如果性能是一个很大的问题,每天运行完整备份,恢复到不同的服务器,并运行对副本的检查。
https://serverfault.com/questions/204009
复制相似问题