高磁盘IO速率
问题描述:
我的Rails应用程序总是达到我的VPS在Linode设置的磁盘I/O速率的阈值。它设置为3000(我从2000年起),每隔大约一小时我会收到一个通知,它达到4000-5000 +。高磁盘IO速率
我可以使用哪些方法来最小化磁盘IO速率?我主要使用狮身人面像(思维狮身人面像插件)和纬度和经度距离搜索。
有什么方法可以避免?
我正在使用Rails 2.3.11和MySQL。
谢谢。
答
因为你的问题不明确,简明地回答,这是一般的几件事情之一的标志:
- 你的数据集是因为你可以修剪历史数据的太大。删除不再相关的内容。
- 您的表格没有正确编制索引,您正在进行大量表格扫描。请在每个慢速查询中与
EXAMINE
进行核对。 - 您的数据结构没有针对您使用它的方式进行优化,而且您正在进行太多连接。一些战术去规范化将在这里帮助。确保你所有的
JOIN
查询是绝对必要的。 - 您正在检索的数据超出了服务该请求所需的数据量。令人遗憾的是,在显示用户名称列表时,人们从用户表中加载巨大的TEXT或BLOB列太常见了。只加载你需要的东西。
- 你正在被某种自动化的刮板机或蜘蛛机器人击中,它一页接一页地系统地下载整个网站。如果这是一个问题,您可能需要更改您的
robots.txt
,或者开始阻止麻烦的IP。
答
它是高位高位持续很长一段时间,还是只是暂时尖峰?
有没有特定的方法可以避免(除非写入磁盘)。
您可以尝试在生产中使用类似NewRelic的分析器,以更深入地了解您的表现。分析器将突出显示需要很长时间的操作,然而,当您检查您在该操作中使用的特定算法时,您可能会发现该特定操作的低效率。
答
你是否检查你的服务器是否交换了自己的死亡? “顶”是什么意思?
你的Linode可能只有有限的RAM,这可能是非常有可能,它是交换像疯了似的让一切运行..
如果在IO图中看到红,那就是交换活动!您需要将您的Linode升级到更多RAM, 或限制正在运行的进程的数量/大小。你还应该添加大约2倍的RAM大小作为交换空间(交换分区)。