我正在帮助一位客户开发一个用 ASP.NET 编写的垂直市场 Web 应用程序。它使用 SQL Server 2005 作为后端。客户的应用程序存在性能问题,而供应商支持对解决该问题没有多大帮助。因此,客户请我以全新的视角来看待这个问题。在对系统和硬件进行一些基本检查时,我注意到 SQL Server 中安排了一项“维护”作业,每 15 分钟运行一次,执行 DBCC CHECKDB,然后执行事务日志备份。在工作时间内,这项作业大约需要 6 分钟才能完成。
当我向供应商的支持人员询问这是否有必要,以及我们是否可以将 DBCC CHECKDB 重新安排为每晚一次时,他们的回答是“这是专有信息,不要触碰任何东西”。
我基本上想了解的是。为什么每 15 分钟运行一次 DBCC CHECKDB 有什么原因吗?除了作业运行时的明显影响之外,运行此命令还会如何影响系统性能?例如,它是否会导致 SQL Server 丢失其内存中的内容?
答案1
DBCC CHECKDB 确实会影响系统性能 - CPU、磁盘 I/O 和内存都会受到影响。以下是 Microsoft 的一些文档,概述了 DBCC CHECKDB 如何影响系统性能:
http://msdn.microsoft.com/en-us/library/aa937548(SQL.80).aspx
http://msdn.microsoft.com/en-us/library/ms175515(SQL.90).aspx
微软的一般建议是它应该在使用率较低的时间运行 - 所以晚上运行一次或类似的时间 - 而不是每天每 15 分钟运行一次。
答案2
DBCC CHECKDB 用于显示数据库中的任何损坏问题。除非存在底层硬件或其他问题,让人相信这种情况会在正常应用程序操作下发生,否则我不确定为什么会这样。
性能问题是响应还是吞吐量?底层数据模型是什么样的?您是否已经了解了常见的查询类型?是否已建立适当的索引(WHERE 子句中没有索引的列)?