目前,我遇到了一个生产 SQL Server 数据库,其中有人添加了 DTA 中几乎所有缺失的索引建议。
表格如何确定索引是否需要或必要我了解到,有 DMV 视图,可用于延迟有关实际索引使用情况和缺失索引的信息。
Jason Strate的脚本仅使用来自该视图的当前信息,而当天的乐趣 - 自动自动索引!将这些视图中的一些信息保存到表中。
另一方面,DTA 需要计划何时运行分析器,选择要分析的内容,并在运行时对性能产生一些影响。
我的印象是,使用 DTA 作为第一步调优工具只是浪费时间,因为它的结果没有涵盖完整的数据库使用情况,新手很难理解,并且可能导致添加太多索引,对写入性能产生负面影响,而通过 DMV 收集数据几乎不需要准备,几乎涵盖了自上次重启以来数据库的全部使用情况。
我的问题集中在向管理层提出哪种战略。我想在第一步中专注于评估 DMV 视图,而完全忽略 DTA。
DTA 有助于添加索引但不会删除索引。如果您面对的数据库已经有超过 5 个索引,比如说,每个表,那么 DTA 不是答案。您需要使用 DMV 来评估现有索引的使用情况。
这是我不久前做过的带有视频教程的脚本:
http://www.toadworld.com/platforms/sql-server/w/wiki/10062.find-indexes-not-in-use.aspx
我认为构建监控 DMV 并随时间跟踪其数据的东西(可能每晚拍摄索引使用情况和丢失的索引 DMV 的快照 - 包括过程统计数据也可能有意义)比运行一些工具更明智只要您想这样做,就可以短时间。您将在更长的时间内获得更好的画面,不仅是他们现在的样子,还有他们随着时间的推移如何变化。
小心不要删除看似未使用但可能与某些在业务周期中仅被调用一次或两次的报告挂钩的索引 - 它可能比其频率所暗示的更重要。
据此(“它”是基于DMV的索引查询)
没有这方面的经验,也不知道任何替代参考,抱歉。
我倾向于坚持使用 DMV,因为 DTA 你需要 db_owner。在产品上(作为开发人员 DBA,而不是生产 DBA)我没有运行这个的权限......