tempdb 上的 DBCC checkdb

SQL*_*DBA 6 sql-server dbcc-checkdb

是否建议在 tempdb 上运行 DBCC CheckDB?如果是,有人可以列出这样做的原因吗?这可以在任何 SQL Server 版本上。我拥有的是 SQL Server 2017。

Eri*_*ing 9

不,不推荐这样做,因为这在很大程度上是在浪费时间。当 SQL Server 重新启动时,将从头开始创建 tempdb。此外,那里的数据还不够长,无法很好地表明它是否存在问题,或者底层存储是否存在问题。

当您设置 CHECKDB 例程时,Ola 的脚本和维护计划都将跳过 tempdb。

它在很大程度上无用的另一个原因是,如果 tempdb 确实被损坏,您会很快知道。在这里查看我的博客文章,其中我故意损坏了 tempdb:DBA Days: Killing TempDB softly

在 SQL Server 2019 中,我们将能够对tempdb 中的系统表使用“内存中”技术。虽然这解决了相当大的争用问题,但您不能针对内存表运行 CHECKDB。您可以检查这些的唯一方法是您是否备份了 tempdb,这不是您可以做的。

BACKUP DATABASE tempdb TO DISK = 'D:\Backups\t.bak'
Run Code Online (Sandbox Code Playgroud)

消息 3147,级别 16,状态 3,第 27 行不允许对数据库 tempdb 进行备份和还原操作。消息 3013,级别 16,状态 1,第 27 行 BACKUP DATABASE 异常终止。

如果您真的认为值得对 SQL Server 不允许您备份的数据库运行 checkdb,那么,我想这是您的维护窗口。


Kin*_*hah 5

补充埃里克的回答

针对 tempdb 运行 DBCC CHECKDB 不会执行任何分配或目录检查,并且必须获取共享表锁才能执行表检查。这是因为出于性能原因,数据库快照在 tempdb 上不可用。这意味着无法获得所需的事务一致性。

我能想到对 tempdb 运行 checkdb 的唯一原因是当 tempdb 严重损坏时,使用它的会话开始出现错误。

此外,当 tempdb 损坏时,您的用户数据库也可能损坏。

我个人没有在 tempdb 上做过 checkdb。