这是场景:
在最大服务器负载期间,我使用 DTA 查找的三个事件(没关系)运行了几个小时的跟踪。然后我停止并将这个分析器负载提供给 DTA。它进行调优工作,并就需要放置哪些索引向我提供反馈。
这是问题:
几个(最多 15 个)不同的索引建议适用于单个表。如果我让 DTA 完成它的工作,这是否意味着要为此创建多个索引?这不会是个问题吗?
这是场景:
在最大服务器负载期间,我使用 DTA 查找的三个事件(没关系)运行了几个小时的跟踪。然后我停止并将这个分析器负载提供给 DTA。它进行调优工作,并就需要放置哪些索引向我提供反馈。
这是问题:
几个(最多 15 个)不同的索引建议适用于单个表。如果我让 DTA 完成它的工作,这是否意味着要为此创建多个索引?这不会是个问题吗?
DTA 在许多情况下都是合理的,但它并不总是给出最佳建议。重叠很常见,聚集索引作为非聚集索引的重复(!)也是如此。
如果您想手动更准确地执行此操作:MS SQL Server 2008 - 我如何记录和查找最昂贵的查询?
在不了解表、查询或索引的情况下,答案必须是“它取决于”......
您需要将 DTA 的输出作为起点。如果您查看推荐的索引,您可能会发现它们之间存在一些重叠,以减少索引的数量。
SQL Server 的优化很复杂,很大程度上取决于数据库中的数据。确定更改将产生什么影响的唯一真正方法是使用代表性数据(最好是实时数据库的备份)对您的数据库执行性能和负载测试
也就是说,15 个索引对我来说似乎很多 - 大量索引可能对该表的写入速度产生不利影响。DTA 可能已针对该表单独运行每个查询,并为每个查询提供最佳索引。您可能会发现通过创建适合多个查询的索引来减少索引数量是可能的——这可能意味着某些查询比所有 15 个索引稍慢,但是您有可能获得 99%改进。
15 个索引对于单个表来说似乎很多。我会查看针对它运行的实际查询本身。
寻找对查询结构进行更改的地方,这些更改将全部针对现有索引或建议索引的一小部分。