【问题标题】:Can we totally depend on Database Engine Tuning Advisor?我们可以完全依赖数据库引擎优化顾问吗?
【发布时间】:2015-07-29 21:07:34
【问题描述】:

我了解了数据库引擎优化顾问以及它如何建议给定查询的索引。我的问题是创建索引时我可以完全依赖这些建议吗?

【问题讨论】:

    标签: sql-server indexing


    【解决方案1】:

    绝对不是。数据库引擎优化顾问的范围非常有限,只为特定工作负载推荐索引。但实际工作量可能会有所不同。

    例如,DTA 会为特定查询推荐 index1。但是如果说该表是大量数据修改的目标,那么与维护index1 的开销和性能影响相比,index1 的好处非常小,因为来自更重要的工作负载的数据修改。 (这只是一个示例,但应该用于说明在索引中使用散弹枪方法如何给您带来麻烦)

    将 DTA 的建议视为...建议。在实际生产等效工作负载中测试推荐索引的尽职调查是无可替代的。

    【讨论】:

    • 感谢您的回答和 +1
    • 我想添加、评估您将与数据重复使用的每个查询的执行计划,并使用结果获得创建索引的经验。您可以探索其他调整工具。
    • 你说绝对不是,你不觉得你在夸大其词吗?
    【解决方案2】:

    数据库调优顾问可以对调优特定查询或大量查询很有用。

    但是

    请注意,在表上添加一堆索引可以帮助提高一个查询的性能,同时损害另一个查询的性能。此外,一个表的索引越多,由于必须写入多个索引,写入所需的时间就越长。

    如果您有特别长时间运行的查询,您可以参考优化顾问的建议(但在将它们扔到桌子上之前,请尝试了解它为什么建议它们)。

    另一个(可能)不错的功能是提供一个跟踪文件供顾问解析。如果您能够获得“类似生产”的跟踪,那可能会为您提供有益的索引以投放到多个表上。通过“类似生产”,我的意思是如果您可以在很长一段时间内获得代表类似生产行为的跟踪。一种选择是跟踪生产(看看为什么这可能是个坏主意https://dba.stackexchange.com/questions/818/using-sql-profiler-on-a-database-thats-in-production)......但要小心,这可能会非常沉重。这是一个关于如何在不使用 UI 的情况下进行更小的足迹跟踪的教程:http://tranpeter.blogspot.com/2013/10/sql-server-proffer-offline.html

    【讨论】:

    • 如果我为 DTA 提供了一个好的跟踪文件,它是否会在为给定查询建议索引时考虑其他查询?
    • 据我了解(可能不正确),DTA 考虑了跟踪文件提供的所有查询。尽管如此,这对于它的建议来说可能是多余的,但它的建议将基于您应用程序中更“真实的工作流程”,因此它在某些方面可能更有用。不过,再次评估您实际添加的索引,看看它们是否有意义。
    • 您对另一个说绝对不是的答案有何看法?
    • 我认为 Thomas 和我的答案非常相似。他的回答直接回答了“我的问题是创建索引时我可以完全依赖这些建议吗?”答案是,绝对不是。您可以将其建议作为起点,但盲目地遵循 DTA 的建议将是一个坏主意。你绝对可以使用它,但你绝对不能单独使用它。无论如何,这就是我接受“绝对不是”的方式。
    • 谢谢,我不知道该给谁正确答案。两个答案都很好,应该是正确的答案。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多