【问题标题】:What could be causing intermittent LOG IO spikes on my SQL Azure database?什么可能导致我的 SQL Azure 数据库出现间歇性 LOG IO 峰值?
【发布时间】:2020-06-09 12:05:46
【问题描述】:

似乎每隔一段时间(1-3 天)我就会得到看似随机的 Log IO 峰值。我有大约两个或三个查询大量使用临时表,但实际上并没有将查询性能洞察力显示为这些 100% 峰值的来源。事实上,如果你看下面的照片,按照最高 Log IO 排序的前 5 个查询几乎没有接近 100 Log IO 的总和

由于我们的 Web 应用程序快速增长,必须从 S1 升级到 S3 后出现这些奇怪的问题。我注意到几乎我所有的索引都非常碎片化,并且由于有关使用 SSD 磁盘的 Azure 的信息存在冲突并且不需要修复索引,我一直推迟到现在修复它们。当我们的用户群变慢时,我将在今晚进行一些维护,但我不确定这是否是原因。

最后一点,顶部图表上的黄色日志 IO 条(很难看到)是我添加的索引。它还在下表中显示为具有 0.13% 的 IO。我可以看到添加索引会占用大量数据库资源,但让我误入歧途的是数据明确表示这不是 100% 飙升的原因。

【问题讨论】:

    标签: azure-sql-database


    【解决方案1】:

    碎片化的索引和过时的统计信息会导致高 I/O。请参考this线程对这些索引进行碎片整理。

    关于日志 IO,要减少数据库上的 I/O,您可以做的一件事是禁用数据库上的行版本控制,并改用读取提交或读取未提交的隔离级别。 here 解释了行版本控制对 Azure SQL 数据库的影响的详细信息。

    【讨论】:

    • 关于碎片化的索引和统计数据,您部分正确。似乎放弃了我的逻辑的变化可能是在我们最大的表上创建了一个更好的索引。在创建这个之前,查询优化器在一个 + 100 万行的表上运行一堆表扫描,现在它可以正确使用搜索。不确定这是否是导致 logio 丢失的原因,因为我已经执行了大约 10 次不同的更新/修复
    • 我与您分享的另一篇文章帮助我降低了高达 50% 的 DTU 消耗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2017-07-24
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多