如何调查“积极索引”

Dal*_*e K 2 performance sql-server sp-blitzindex performance-tuning

在我的数据库上运行 sp_BlitzIndex 后,我发现了许多“主动索引”(https://www.brentozar.com/blitzindex/sp_blitzindex-aggressive-indexes/)。不仅如此,我还发现“积极索引”的数量正在缓慢增加。

我是一名涉足 DBA 方面的开发人员,我不知道如何从 sp_BlitzIndex 提供的有关主动索引的信息改进它们。

我可以调整单个查询的性能,但是我不知道如何找出索引变得激进时可能发生的查询,并且我假设发生锁定是因为服务器负载不足 - 这不会如果我调整单个查询,情况并非如此。

任何有关如何进一步调查的提示将不胜感激。

Bre*_*zar 9

我们在Aggressive Indexes 页面上有大量的学习资源(我刚刚更新了更多,巧合的是),我什至无法开始对它进行全面评估。话虽如此,那就去吧。

想象一下,您只有一个表上的聚集索引。插入将非常快速。但是,当您尝试更新该表中的一行时,并且您没有在 where 子句中指定集群键,那么您最终会得到很多表锁(攻击)。在这种情况下,解决方法是为您经常查询的字段添加索引。

另一方面,假设您有几十个索引。每当您想插入或删除行时,您都需要在各处加锁才能完成工作。大量索引会减慢您的速度,因为没有人可以快速完成插入或删除操作——而且,您将再次看到激进的索引警告。在这种情况下,解决方法是将索引数量减少到更易于管理的数量。

通常,对于事务表(与隔夜数据仓库加载相反),我告诉人们要瞄准:

  • 每个表 5 个或更少的非聚集索引,
  • 每个索引 5 个或更少的字段

可能会违反 5 和 5 的规则——您的写入活动越少,您的硬件越快,并且您对查询的调整越好,您就越有可能摆脱更多索引。另一方面,如果你有糟糕的硬件和糟糕的查询,你可能需要降低这些数字。

5 和 5 规则源于这样一个事实,即我必须在某个地方开始人们,我一只手有 5 个手指,另一只手有 5 个手指 - 所以这个规则很容易交流。