我正经历一场典型的开发人员与系统管理员之间的斗争,我说共享 SQL 服务器的磁盘存在 IO 问题,而系统管理员告诉我容量根本没有达到。
我能指出的一件事是,SQL 服务器上的平均磁盘队列长度非常高。平均队列长度平均为 5,经常会飙升至 10 到 15。它从未低于 2.5
系统管理员告诉我这不是问题,因为磁盘是 6 个磁盘的条带,如果队列长度高于主轴数量的两倍,则队列长度在定义上是不好的。所以他的公式是 6*2=12,低于平均值 5。
他的推理正确吗?我们可以将 Azure 磁盘视为主轴吗?最小 5 的恒定平均队列长度不是一个指示吗?
编辑:事实证明,磁盘是一个巨大的瓶颈。将数据库移至单独的数据库服务器后,应用程序再次顺利运行。
答案1
答案2
对 Azure 来说还很陌生,但这是我的建议:
您跨越的 Azure 磁盘越多,性能就越好,这是事实。不过我不确定这个等式。无论如何,我认为你选错了方向……
Azure 对 IOPS 和每秒最大读/写次数等指标施加了人为限制,因此队列长度只是您需要查看的几个指标之一。
这个问题和你的类似。它对Azure SQL 性能文章也是如此。确保遵循 Microsoft 的最佳实践可以帮助您提高性能。
我不确定进一步增加您使用的磁盘数量是否有帮助。据我所知,增长不是线性的。您可能希望 6 个磁盘的 IOPS 为 3000(6x500),但可能更接近 2000。
迁移到 DS (SSD) 层可能是从单个 VM 获得所需性能的唯一方法。以下是 Azure 实例限制的简要说明:https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-size-specs/
最后,提高任何应用程序性能的最佳方法是减少对 I/O 的依赖。尽可能使用缓存。您可以尝试使用具有更多内存的实例。