Azure SQL 数据库自动调整 - 开发而不用担心索引?
Azure SQL Database Autotuning - Develop without worrying about indexes?
Azure 的 SQL 数据库自动调整功能根据数据库使用情况创建和删除索引。我已经将一个旧数据库导入到 Azure,它没有定义综合索引,它似乎在相对较短的时间内减少 CPU 和 DTU 使用率方面做得很好。
感觉不对-但这是否意味着我可以在不定义索引的情况下继续开发?有人这样做吗? SSMS 索引编辑器修改起来很痛苦而且很慢。不必 worry/maintain 索引会加快开发时间。
自动调整利用了三件事,查询存储、缺失索引和机器学习。
首先,最后一个已知的好计划是查询存储的武器化。这在 Azure 和 SQL Server 2017 中都存在。它将发现在计划更改后性能下降的查询(以及相当多的执行,而不仅仅是一次)并将恢复到该计划。如果性能下降,它会关闭它。这很棒。但是,如果您编写了垃圾代码或数据结构错误或统计数据过时,那将无济于事。
Azure 中的自动索引使用两件事,缺少来自优化器的索引建议和 Azure 上的机器学习。有了这些,如果丢失的索引在 12-18 小时内出现很多(阅读此博客 post 关于自动化),您将获得索引建议。它会再测量 12-18 小时,如果该指数有帮助,它就会保留,如果没有,它就会消失。这也很棒。然而,它有两个问题。首先,和以前一样,如果你有垃圾代码等,这只会真正帮助边缘。其次,来自优化器的缺失索引建议并不总是最好的索引。例如,当我写博客 post 时,它适当地识别了一个缺失的索引,但它忽略了一个事实,即 INCLUDE 列会比它建议的索引更好。
人类的大脑和眼球仍将解决更困难的问题。这些自动化带走了很多更容易、容易解决的问题。总的来说,这是一件很棒的事情。但是,不要将它与所有与性能相关的灵丹妙药混淆。绝对不是。
Azure 的 SQL 数据库自动调整功能根据数据库使用情况创建和删除索引。我已经将一个旧数据库导入到 Azure,它没有定义综合索引,它似乎在相对较短的时间内减少 CPU 和 DTU 使用率方面做得很好。
感觉不对-但这是否意味着我可以在不定义索引的情况下继续开发?有人这样做吗? SSMS 索引编辑器修改起来很痛苦而且很慢。不必 worry/maintain 索引会加快开发时间。
自动调整利用了三件事,查询存储、缺失索引和机器学习。
首先,最后一个已知的好计划是查询存储的武器化。这在 Azure 和 SQL Server 2017 中都存在。它将发现在计划更改后性能下降的查询(以及相当多的执行,而不仅仅是一次)并将恢复到该计划。如果性能下降,它会关闭它。这很棒。但是,如果您编写了垃圾代码或数据结构错误或统计数据过时,那将无济于事。
Azure 中的自动索引使用两件事,缺少来自优化器的索引建议和 Azure 上的机器学习。有了这些,如果丢失的索引在 12-18 小时内出现很多(阅读此博客 post 关于自动化),您将获得索引建议。它会再测量 12-18 小时,如果该指数有帮助,它就会保留,如果没有,它就会消失。这也很棒。然而,它有两个问题。首先,和以前一样,如果你有垃圾代码等,这只会真正帮助边缘。其次,来自优化器的缺失索引建议并不总是最好的索引。例如,当我写博客 post 时,它适当地识别了一个缺失的索引,但它忽略了一个事实,即 INCLUDE 列会比它建议的索引更好。
人类的大脑和眼球仍将解决更困难的问题。这些自动化带走了很多更容易、容易解决的问题。总的来说,这是一件很棒的事情。但是,不要将它与所有与性能相关的灵丹妙药混淆。绝对不是。