幽灵清理设置


10

我正在运行一个高事务性的数据库(平均约17.5万笔事务/分钟,每小时将近900万条记录被添加和删除)

直到最近,这还不是什么大问题,因为我们已经添加和删除了约750万条记录,但是随着最新数据的涌入,幽灵清理似乎无法跟上清理工作的步伐。表/索引上未使用的空间。

几天前,我们在16个表(大多数是2个表)中达到了53 GB的“未使用空间”,因此开始研究幽灵清理过程,发现它每5秒运行一次并运行10页。

我当前的解决方案是那天清晨,我正在运行以下命令的三个线程:

DECLARE @2hours datetime = dateadd(hour,2,getutcdate())

WHILE getutcdate() < @2hours
BEGIN
    DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH  NO_INFOMSGS
END

赶上前一天晚上的积压工作(大部分删除操作都发生了)

我想知道是否有办法将默认设置从5秒和10页更改为每秒一次或运行超过20页,是否有任何方法可以这样做,还是我应该继续整理多个清理过程来清除数据,或者是否有其他措施可以帮助您

重新编制索引至少每周一次(大多数情况是隔天一次)对受影响最大的索引进行一次

AlwaysOn高可用性群集上的SQL Server 2012 Enterprise SP3_CU8(明天升级到CU9)也具有复制功能(在单独的服务器上分发)

Answers:


4

我想知道是否可以将默认设置从5秒10页更改为每秒说一次或运行20页以上

不,没有。到目前为止我还不知道的Atleast :-)

是否还有其他措施可以帮助解决此问题

来自Paul Randal的博客 -人们有时考虑的一种方法是通过执行表或索引扫描(从而将所有已删除的记录排队以进行幽灵清理任务)来强制幽灵清理来清理所有内容。

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

您是否可以对表进行分区并清除旧分区,而不是执行删除操作?仅供参考.. SQL Server 2016及更高版本也允许您截断单个分区。

另外,您可以(测试并实施) - 禁用幻影清理(跟踪标志661),然后rebuild index WITH ONLINE = ON选择该选项,因为您使用的是Enterprise Edition。

如果您对复制使用AlwaysOn(带有异步),请确保启用跟踪标志1448-即使异步辅助副本未确认已收到更改,复制日志读取器也可以向前移动。

确保阅读Paul White的“ 删除拆分页面和转发的幽灵”,以查看您的表中是否有触发器或LOB列会变慢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.