磁盘IO速率高

时间:2011-10-07 01:44:02

标签: sql ruby-on-rails ruby

我的rails应用程序总是达到我在Linode的VPS设置的磁盘I / O速率的阈值。它设置为3000(我从2000年开始),每隔一小时左右,我会收到一个通知,它达到4000-5000 +。

我可以使用哪些方法来最小化磁盘IO速率?我主要使用Sphinx(Thinking Sphinx插件)和纬度和经度距离搜索。

有哪些方法可以避免?

我正在使用Rails 2.3.11和MySQL。

感谢。

3 个答案:

答案 0 :(得分:5)

你检查过你的服务器是否正在自行处死? “顶级”说什么?

你的Linode可能只有有限的内存,很可能它会像疯了一样交换以保持运行...

如果您在IO图中看到红色,那就是交换活动!您需要将Linode升级到更多内存, 或限制正在运行的进程的数量/大小。您还应将RAM大小的大约2倍添加为交换空间(交换分区)。

http://tinypic.com/view.php?pic=2s0b8t2&s=7

答案 1 :(得分:3)

由于您的问题过于模糊而无法简洁地回答,这通常是以下几种情况之一的标志:

  • 由于您可以修剪的历史数据,您的数据集太大。删除不再相关的内容。
  • 您的表格未正确编入索引,并且您正在进行大量的表扫描。在每个慢速查询中查看EXAMINE
  • 您的数据结构未针对您使用它的方式进行优化,并且您正在进行太多的连接。一些战术反规范化在这方面会有所帮助。确保所有JOIN查询都是必需的。
  • 您正在检索的数据超出了为请求提供服务所需的数据。遗憾的是,当仅显示用户名列表时,人们从用户表中加载巨大的TEXT或BLOB列是很常见的。只加载你需要的东西。
  • 你被某种自动刮刀或蜘蛛机器人击中,这种机器人会逐页地系统地下载你的整个网站。如果这是一个问题,您可能想要更改robots.txt,或者开始阻止麻烦的IP。

答案 2 :(得分:0)

它是否会持续很长时间并保持高位,或者只是暂时飙升?

没有特定的方法可以避免(除了不写入磁盘)。

您可以尝试在NewRelic等制作中使用分析器,以更深入地了解您的效果。然而,探查器将突出显示需要很长时间的操作,当您检查在该操作中使用的特定算法时,您可能会发现该特定操作的效率低下。