mongodb 性能调优

可以根据如下URL获得mongodb当前的运行状况:
http://ip:28017/

mongodb性能优化:
http://lgone.com/html/y2010/774.html
http://www.mongodb.org/display/DOCS/Database+Profiler

mongodb运行状况:
mongostat命令
mongodb日志:/data/mongodb_data/mongodb.log

经常监控mongodb.log,能够发现mongodb中存在的一些问题,比如,如果日志中大量出现类似:
Fri Jan 14 12:47:36 [conn5572] info DFM::findAll(): extent 6:19e07300 was empty, skipping ahead
可以使用db.collection_name.reIndex()命令重建索引就可以

如何对索引进行管理?
http://www.mongodb.org/display/DOCS/Indexes#Indexes-IndexPerformance

mongodb监控:http://www.mongodb.org/display/DOCS/Monitoring+and+Diagnostics
其中有介绍如何记录下对mongodb的写操作和读操作,以便进行分析

mongosniff可以从底层监控到底有哪些命令发送给了mongodb去执行,从中就可以进行分析:
http://www.mongodb.org/display/DOCS/mongosniff


设计合理的数据结构,应用架构以及业务逻辑.
合理使用索引
如,当需要返回的记录数比扫描的记录数少得多时,结合collection的读写场景,考虑是否使用索引。
限制输出结果
当需要返回的结果集非常大时,如无必要,考虑使用limit限制输出.
仅仅选择需要输出的列
返回结果应该只包含需要返回的列,而不是所有列.这样的话可以减少返回的字节数,节约带宽.
$inc使用
当更新的记录中存在需要增加或减少的字段时,考虑使用$inc,效率比去除记录,更新记录再插回去会高很多.
> db.test.insert({"a":1})
> db.test.update({"a" : 1},{"$inc" : {"a" : 1}})
> db.test.find()
{ "_id" : ObjectId("4d297bfff59946c5070b2504"), "a" : 2 }
> db.test.update({"a" : 2},{"$inc" : {"a" : -1}})
> db.test.find()
{ "_id" : ObjectId("4d297bfff59946c5070b2504"), "a" : 1 }

capped collection合理使用
读写效率都还可以,并且严格$natural.

服务端代码合理使用
使用服务端代码可以减少网络消耗(类似传统数据库的函数和存储过程),提高效率.

使用profile分析:
mongoDB的profile是分析数据库热点,优化数据库的非常好用的功能

优化count()
count()和offset()都是数据库杀手,建索引是很有必要的(尽量减少scan)。

explain()和hint()
对于profile得到的执行代码,使用explain分析,必要时可以使用hint()强制索引或全表扫描.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值