我正在开发一个经典的开发者系统pipe理员战斗,我声称在共享sql服务器的磁盘上有一个IO问题,而系统pipe理员告诉我这个容量还没有达到。
我能够指出的一点是,SQL服务器上的平均磁盘队列长度非常高。 平均队列长度平均为5,经常峰值为10到15.它永远不会低于2.5
系统pipe理员告诉我,这不是一个问题,因为磁盘是6个磁盘的条带,如果高于主轴的倍数,则队列长度在定义上是不好的。 所以他的公式是6 * 2 = 12,低于平均值5。
他的推理是否正确? 我们可以把一个azure色的磁盘看成一个主轴吗? 最小5的恒定平均队列长度不是一个指示?
编辑:事实certificate,磁盘是一个巨大的瓶颈。 将数据库移动到单独的数据库服务器后,应用程序再次顺利运行。
你只关注一个指标!
诊断单个组件的瓶颈很less以一个计数器给出完整的解释结束。
使用perfmon来诊断SQL Server的性能问题有很多 很好的 指导 。
不幸的是你的pipe理员可能是正确的,你select的计数器确实取决于底层硬件。 但是,我找不到任何文档,指出Azure基于6磁盘RAID。 那么也许专注于其他计数器?
但作为最后的build议。 如果你唯一的迹象是平均。 磁盘队列长度,您的系统pipe理员可能是正确的。
如果您确定这是一个磁盘问题,您可以随时尝试创build存储空间。
Azure相当新,但这是我的产品:
越多的Azure磁盘越好,性能会越好,这是真的。 虽然我不确定这个等式。 无论哪种方式,我认为你在咆哮错误的树…
Azure对每秒的IOPS和Max读/写等指标施加了人为的限制,因此队列长度只是您需要查看的几个指标之一。
这个问题在性质上与你的相似。 它也有一个有用的参考Azure SQL性能文章 。 确保您遵循Microsoft的最佳做法可以帮助您提高性能。
我不确定进一步增加您使用的磁盘的数量将有所帮助。 从我所看到的,增长不是线性的。 您可能预期6个磁盘的IOPS为3000(6×500),但可能更像2000。
迁移到DS(SSD)层可能是通过单个虚拟机获得所需性能的唯一方式。 以下是对Azure实例限制的详细介绍: https : //azure.microsoft.com/en-gb/documentation/articles/virtual-machines-size-specs/
最后,提高任何应用程序性能的最佳方法是减less对I / O的依赖。 caching尽可能。 你可以尝试一个更多的内存实例。