![SQL 2008 每 10 分钟执行一次 CHECKDB,有什么想法可以解释原因吗,或者我可以在哪里找到答案?](https://linux22.com/image/494958/SQL%202008%20%E6%AF%8F%2010%20%E5%88%86%E9%92%9F%E6%89%A7%E8%A1%8C%E4%B8%80%E6%AC%A1%20CHECKDB%EF%BC%8C%E6%9C%89%E4%BB%80%E4%B9%88%E6%83%B3%E6%B3%95%E5%8F%AF%E4%BB%A5%E8%A7%A3%E9%87%8A%E5%8E%9F%E5%9B%A0%E5%90%97%EF%BC%8C%E6%88%96%E8%80%85%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%93%AA%E9%87%8C%E6%89%BE%E5%88%B0%E7%AD%94%E6%A1%88%EF%BC%9F.png)
我有一个每晚运行的完整备份以及每 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.