一 索引
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
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