MongoDB 的磁盘 IO 高到被 Linode 警告..

2014-07-08 10:19:11 +08:00
 undeflife
我有个网站搭在Linode上,用的MongoDB 2.4.9 ,一天大概6000个PV而已,但是磁盘IO很高,昨天Linode给发了abuse ticket说我IO已经高到影响到邻居了 ,MongoDB的设置基本都是默认的,请问怎么解决这个问题
10754 次点击
所在节点    MongoDB
34 条回复
undeflife
2014-07-08 16:19:13 +08:00
@msg7086 考虑迁到postgreSQL上去,这样部分数据结构的问题可以使用PostgreSQL的json字段的特性解决,只不过这个需要开发时间,我现在需要解决掉这个高IO的问题,还不知道我如果持续不解决,Linode会怎么处理
msg7086
2014-07-08 16:59:02 +08:00
@undeflife mongodb我不熟所以没办法帮你。

Linode如果abuse的话是停掉你的机子直到你能解决问题为止。
codingpp
2014-07-08 18:07:39 +08:00
会不会是journal日志的影响
undeflife
2014-07-08 18:29:45 +08:00
@codingpp 有过这个怀疑 但是不敢关闭 - -
skybr
2014-07-08 18:36:58 +08:00
@undeflife 没办法, mongo的性能和可靠性本身就高度依赖充足的内存和冗余的节点来保证.


@missdeer 有nosql需求的还是走pg吧, hstore很靠谱, 9.4之后还有jsonb.
happy123
2014-07-08 18:37:10 +08:00
mongostat

看一下faults数目,正常情况下应该为0的。如果持续大于0说明一直在换页,该加内存了。如果持续100+,iostat看下IO负载,绝对要加内存了。
codingpp
2014-07-08 18:46:01 +08:00
@undeflife
用了journal日志也会丢消息吧,mongo又不支持事务,journal刷新磁盘默认好像是100ms,这100ms内的日志还会丢
把journal日志关掉,就是把这100ms变成了60s

前天写个用mongo的程序,数据文件300m,journal日志3g,过不了几天我的小vps就没空间了。。。
undeflife
2014-07-08 18:57:56 +08:00
@happy123
@codingpp
faults 4~15 所以还是内存的问题..我准备晚上试试 repairDatabase 这样数据文件能变得小一些 看有没有效果.
sujin190
2014-07-08 19:09:23 +08:00
这个4g内存,8g数据怎么会有那么高的fault,是不是索引建的有问题啊?或者是数据结构问题,每次查询都要调入所有数据到内存?
sujin190
2014-07-08 19:11:56 +08:00
你这fault是1046么?!!
undeflife
2014-07-08 20:19:40 +08:00
@sujin190 找到个坑...程序上有个地方无索引的排序整个大collection,把这个语句干掉之后似乎情况好了不少...
sujin190
2014-07-08 21:21:54 +08:00
@undeflife 8g,应该还不到百万条记录吧
undeflife
2014-07-08 21:38:50 +08:00
@sujin190 嗯 不到 90几万
leafonsword
2014-07-09 13:35:36 +08:00
1.加索引
2.加内存
3.换成支持数据压缩的TokuMX

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX