我的rails应用程序总是达到vps在linode设置的磁盘i/o速率的阈值。它被设置为3000(我从2000年开始升级),每隔一个小时左右我就会收到一个通知,说它达到4000-5000+。
我可以使用哪些方法来最小化磁盘IO速率?我主要使用sphinx(思考sphinx插件)和经纬度距离搜索。
有哪些方法可以避免?
我使用的是rails 2.3.11和mysql。
谢谢。
最佳答案
由于你的问题太模糊,回答不清楚,这通常是以下几种情况之一的表现:
您的数据集太大,因为您可以删除历史数据。删除不再相关的内容。
您的表索引不正确,并且正在进行大量的表扫描。在每个慢速查询中使用EXAMINE
进行检查。
您的数据结构没有针对您使用它的方式进行优化,而且您正在执行太多的连接。一些战术上的去正常化会有帮助。确保所有JOIN
查询都是严格必要的。
您检索的数据超过了服务请求所需的数据量。不幸的是,当只显示用户名列表时,人们从用户表中加载大量文本或blob列的情况非常普遍。只装你需要的东西。
你正在被某种自动刮板或蜘蛛机器人击中,这种机器人系统地一页一页地下载你的整个网站。如果这是一个问题,您可能需要更改robots.txt
,或者开始阻塞麻烦的IP。
关于sql - 高磁盘IO率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7682290/