问题在于,我们的定期维护计划会重建所有碎片化程度超过 30% 的数据库上的索引,并定期重建新的列存储索引,这会最大限度地利用我们的 CPU 并有导致服务器崩溃的风险。
我们在定期维护之前重新组织我们的列存储索引。
我们如何才能阻止定期维护计划重建列存储索引?
我们使用的是 SQL Server 2016 企业版。
答案1
使用向导
根据重组并重建索引文档:
直到 SQL Server 2017 (14.x),重建聚集列存储索引都是脱机操作。重建时,数据库引擎必须获取表或分区上的独占锁。即使使用 NOLOCK、读取已提交快照隔离 (RCSI) 或快照隔离,重建期间数据仍处于脱机状态且不可用。从 SQL Server 2019 开始,可以使用 ONLINE=ON 选项重建聚集列存储索引。
了解这一点后,只要您使用的是 SQL Server 2016,就可以检查向导选项对于不支持在线索引重建的索引类型不重建索引。
请记住,使用此方法将跳过所有不支持在线重建的索引。
使用脚本
如果可以改变重建的方式,你可以开始使用脚本而不是向导和查询系统索引帮助您选择要重建的正确索引。这是一个系统视图可以列出您的所有索引。此视图的其中一列是类型值 5 和 6 分别与 Clustered columnstore 和非 clustered columnstore 相关。将此视图加入到您使用的查询中,可以过滤掉列存储索引,并避免与其他索引一起重建它们。