幽灵清理

SQL*_*tar 7 sql-server sql-server-2008

我对幽灵清理过程的理解是,每五秒它就会寻找删除索引中的幽灵记录。因此它不会使系统过载,它一次只能“清理”大约十页。

那么,这意味着它每五秒只清理大约 8 万条记录吗?似乎我的索引总是充满了幻影记录,清理工作永远不会完成。

所以,假设我运行了一次删除,可能是一百万行,而这几百万行的索引记录的大小大约为 8Gb。所以大约是 80k 差异的 100,000 倍。这是否意味着幽灵清理过程将需要 500,000 秒或几乎六天才能完成?

显然我在这里遗漏了一些东西,因为清除幻影记录需要那么长时间是没有意义的。那么达到相同索引的其他活动呢?鬼清理过程是否会导致等待,或者必须等待其他进程?

[这个问题是由我们在 OpsMgrDW 中看到的性能问题引起的,我们想了解更多关于这个过程的信息]

Pau*_*dal 4

我写了两篇综合性的博客文章来解释幽灵清理(这是唯一在任何地方(无论是印刷版还是在线版)对其进行深入解释的地方)。

第一个是存储引擎内部:深度 Ghost 清理,第二个是Ghost cleanup redux。是的,每次 10 页,幽灵清理任务有可能永远赶不上大量的连续删除。

除了每 5 秒 10 页的清理之外,还可以通过确保存储引擎“看到”幻影记录来主动触发幻影清理。使用类似的方法强制扫描受影响的表或索引

select * from [问题表] with (index = 问题索引)

这将排队请求以主动清除幽灵记录。但请注意,它在执行此操作时会生成大量事务日志。作为定期索引维护的一部分,它们还应该通过索引重建或重组来清除。

希望这可以帮助。