我最近遇到了一个有趣的文章介绍了如何使用 IO 统计数据来确定性能问题的原因。检查统计数据后,我确定存在“IO 子系统瓶颈”。
不幸的是,我真的不知道这是什么意思。从我在网上找到的信息来看,增加一些内存可能会有帮助(我猜是因为它不需要写入磁盘太多),但我很好奇是否有人知道确定如何进行的好方法?
答案1
IO 子系统通常处理磁盘存储。当需要写入或读取数据时,就会发生这种情况。一般来说,您需要监控磁盘队列深度。我不记得具体建议了,但我认为它大约是所涉及的物理磁盘数量的 1.5 *。
根据您的发现,存在几种潜在的解决方案。
首先,在服务器中获取足够的 RAM,以便它基本上可以将整个数据库保存在内存中,并有足够的空间来执行查询。您阻止其分页到磁盘的时间越少,您的情况就越好。这包括拥有足够的 RAM 来将临时表保存在 RAM 中,而不是将它们分页到磁盘。
其次,获取更快的磁盘。15k SCSI 驱动器经过适当突袭。如果适用,您甚至可以研究 SSD;但在研究之前,请注意它们的局限性。将日志文件放在单独的磁盘系统上,并可能将表分区,以便它们也放在不同的磁盘上。这可能变得复杂且非常昂贵。
第三,调整查询以更好地利用索引,这也有助于限制服务器必须转到磁盘来提取完整记录的时间。
最后,除非真的存在问题,否则不要担心。如果您的应用程序运行速度很快,那么请寻找其他区域进行“修复”如果这是实际问题,那么请决定是否该扩展您的服务器了。
答案2
在开始升级 IO 系统之前,您需要查看索引。如果索引不正确,这将导致磁盘上出现更多的 IO 负载。修复索引问题后,如果仍然有 IO 问题,则需要添加更多主轴或切换到闪存驱动器。
答案3
IO 子系统基本上意味着磁盘/存储。如果这确实是您的瓶颈,您可以通过添加更多和/或更快的磁盘来提高性能。选择正确的 RAID 级别也很重要,对于数据库来说,RAID 10 通常优于 RAID 5,尤其是对于写入负载较重的情况。
但首先要确保您的服务器没有浪费磁盘带宽。适当的索引对于数据库性能至关重要。更多的缓存内存也可以降低 IO 负载。根据访问模式,重新组织数据以获得更好的局部性可能会有所帮助。