SQL 2008 每 10 分钟执行一次 CHECKDB,有什么想法可以解释原因吗,或者我可以在哪里找到答案?

SQL 2008 每 10 分钟执行一次 CHECKDB,有什么想法可以解释原因吗,或者我可以在哪里找到答案?

我有一个每晚运行的完整备份以及每 2 小时运行一次的事务日志备份。完整备份运行时还会缩小并检查数据库的完整性。

除了我认为是 SQL 自动创建的 syspolicy_purge_history 作业之外,似乎没有运行任何其他作业。

谢谢

答案1

一些事情。

1) 关闭自动收缩功能。此功能非常糟糕,并且可能导致长期性能问题,因为它会导致文件级碎片化。

2) 如上所述,AUTO CLOSE 似乎已打开。您需要将其关闭,因为这是另一个不利于良好性能的因素。为什么?每次关闭最后一个连接时,SQL Server 都会尝试自行关闭,这会导致清除过程和数据缓存。这两个功能通过减少从磁盘获取数据的需要来支持良好的性能,与从内存读取相比,从磁盘获取数据的需要非常昂贵。生成执行计划是一个 CPU 密集型过程,您的 SQL Server 必须在从自动关闭中恢复后生成计划。现在您知道它在做什么,继续关闭 AUTO CLOSE。

3) SQL Server 并非真正执行 DBCC CHECKDB,而是在读取存储上次干净运行 DBCC CHECKDB 日期的启动文件后显示一条消息。它只是写入日志文件,而不是真正在这里运行 CHECKDB。看起来您已经运行 CHECKDB 超过 2 个月了,尽可能定期运行 CHECKDB 是一种很好的做法。

http://technet.microsoft.com/en-us/magazinebeta/2009.10.sqlqa.aspx

答案2

我会检查您的数据库是否启用了 Auto_Close。启用后,最后一个用户退出连接后,您的数据库将关闭并释放其资源。当新用户使用数据库时,它会重新打开。如果您的数据库每次打开时都运行 checkdb,那么这可能是您的问题。

以下查询将检查所有数据库上的 Auto_Close:

从 sys.databases 中选择 *
其中 is_auto_close_on = 1

答案3

我遇到过类似的情况,即在没有安排任何任务时,奇怪的 DBCC CHECKDB 会运行。经过一番仔细的调查,我找到了我们的一位服务器工程师,他被指示使用 Symantec 备份数据库(这些是 Sharepoint db)。就在他备份之前,Symantec 工具配置为运行 DBCC CHECKDB。在这种情况下,Symantec 保持连接,因此 Activity Monitor 帮助我解决了这个问题。

答案4

感谢这篇文章,我刚刚通过禁用自动关闭和自动收缩修复了 3 个数据库,以摆脱每 5 分钟一次的“启动数据库...”和“CHECKDB”消息

And possible errors caused by them
27/08/2010 10:09:01     SQL Server has encountered 3 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations. 
27/08/2010 10:09:01     SQL Server has encountered 3 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.       
27/08/2010 10:09:00     SQL Server has encountered 3 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.      

相关内容