可以根据如下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()强制索引或全表扫描.
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()强制索引或全表扫描.