Azure SQL 数据库自动调整 - 开发时无需担心索引?

标签 azure indexing azure-sql-database ssms auto-tuning

Azure 的 SQL 数据库自动调整功能会根据数据库使用情况创建和删除索引。我已将一个旧数据库导入到 Azure,该数据库没有定义全面的索引,但它似乎在相对较短的时间内减少了 CPU 和 DTU 使用量方面做得很好。

感觉不对 - 但这是否意味着我可以在不定义索引的情况下继续开发?有人这样做吗? SSMS 索引编辑器修改起来很痛苦且缓慢。不必担心/维护索引会加快开发时间。

最佳答案

自动调整利用了三件事:查询存储、缺失索引和机器学习。

首先,最后一个已知的好计划是查询存储的武器化。 Azure 和 SQL Server 2017 中都有这种情况。它将发现计划更改(以及相当多的执行,而不仅仅是一次)后性能下降的查询,并将恢复到该计划。如果性能下降,则会将其关闭。这很棒。但是,如果您编写了垃圾代码或拥有糟糕的数据结构或过时的统计信息,那么它并没有多大帮助。

Azure 中的自动索引使用两个东西,即缺少来自优化器的索引建议和 Azure 上的机器学习。有了这些,如果缺失的索引在 12-18 小时内大量出现(请阅读这篇关于自动化它的博客文章),您将获得索引建议。它会再测量 12 到 18 小时,如果该指数有帮助,它就会保留,如果没有,它就会消失。这也很棒。然而,它有两个问题。首先,和以前一样,如果你有垃圾代码等,这只会在边缘有真正的帮助。其次,优化器所建议的缺失索引并不总是最佳索引。例如,当我撰写博客文章时,它适本地识别了缺失的索引,但它忽略了这样一个事实:INCLUDE 列会比它建议的索引更好。

人脑和眼球仍然可以解决更困难的问题。这些自动化解决了许多更容易、更容易解决的问题。总的来说,这是一件很棒的事情。但是,不要将它与所有与性能相关的事情的 Elixir 混淆。绝对不是。

关于Azure SQL 数据库自动调整 - 开发时无需担心索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269008/

相关文章:

azure - 在Azure数据工厂中读取excel文件

azure - 在 Azure 中创建暂存和生产环境的正确方法

Azure函数队列触发分布式跟踪

sql-server - 在我们的 SQL Server 数据库中应该多久重建一次索引?

c# - 您可以使用 SQL Azure 来实现简单的 ASP.NET 解决方案吗?

azure - 在 Azure APIM 中接收并记录未知的 Get 调用

mysql - 索引组的排序

mysql - mysql 中的索引 SELECT AS 或使用 View

sql-server - 什么 Azure 角色允许用户配置 SQL Server 防火墙规则?

sql-server - 如何检索最新的 Identity 值并在 SQLServer/Azure 中的 INSERT 语句中使用它?