mongo性能优化

来源:互联网 发布:淘宝的钻石和皇冠 编辑:程序博客网 时间:2024/06/05 21:09
一 索引
mongo的索引信息被保存在system.indexes 中,默认为_id创建索引
1 普通索引
db.users.ensureIndex({name:1}) 


如果数据量很大,那么放后台去跑
db.users.ensureIndex({name:1},{backgroud:true})


2 组合索引
db.address.ensureIndex( { "addr.city" : 1, "addr.state" : -1 } );
和关系型数据库差不多,条件列顺序和索引顺序一致才能使用哦


3 唯一索引
db.collections_name.ensureIndex({"age": 1}, {unique: true});


4 强制使用索引 (加hint)
db.users.find({age:{$lt:30}}).hint({name:1, age:1})


5 删除索引
users集合的索引都被干掉了
db.users.dropIndexes()
删除users集合的某一个索引
db.users.dropIndexes({"age":1})


6 查看某个集合上的索引
db.users.getIndexes(); 


二 利用profile定位慢查询
db.setProfilingLevel()
0 不开启
1 记录慢查询(默认为>100ms)
2 记录所有查询


设置记录的的条件,500ms
1 db.setProfilingLevel(1,500);  
db.getProfilingStatus();  查看是否打开慢查询


2 生成慢查询
db.system.profile.find().sort({millis:-1}).limit(10);  返回10条慢查询
根据语句,加索引


3 关闭profile
db.setProfilingLevel(0);


三 性能监控工具
1 mongostat
insert: 每秒插入量
query: 每秒查询量
update: 每秒更新量
delete: 每秒删除量
locked: 锁定量
qr | qw: 客户端查询排队长度(读|写)
ar | aw: 活跃客户端量(读|写)
conn: 连接数
time: 当前时间


2 db.serverStatus
关注
extra_info.page_faults
lock
mem 
connections


3 db.stats


四 常用性能优化方案


1 创建索引

2 限定返回结果

3 只查询使用的字段
4 发现性能有问题,配合使用profiling和mongostat