mongostat工具,会定时输出当前mongodb的运行状态
mongostat -h x.x.x.x:27017 -u root -p123456
-h:指定IP地址和端口可以使用--port来指定端口号
-u:如果开启了认证,则需要在后面填写用户名
-p:密码
输出样例:
重要字段解释及关注:
- insert:每秒插入数据库的对象数量。如果是slave,数值前面有*则表示复制集操作
- query:每秒查询操作的次数
- update:每秒更新操作的次数
- delete:每秒删除操作的次数
- getmore:每秒查询cursor(游标)时的getmore操作数
- dirty:脏数据字节的缓存百分比(仅针对WiredTiger引擎)
- used:正在使用的缓存百分比(仅针对WiredTiger引擎)
- flushes:(仅针对WiredTiger引擎)指checkpoint的触发次数在一个轮询间隔期.一般都是0,间接性是1.flush开销很大,如果频繁flush则会有问题
- vsize:虚拟内存使用量
- res:物理内存使用量
- arw:执行读写操作的活跃客户端数量
- qrw:客户端从mongodb实例读写数据的队列长度
- net_in:mongo实例的网络进流量
- net_out:mongo实例的网络出流量
- conn:打开的总连接数 建议5000以下
查看日志:
先从mongod.conf文件中找到logpath的定义.再在对应的路径查看日志文件
设置日志级别:
db.setLogLevel(<level>, <component>)
level int
0 is the mongodb default log level
-1 all level
1 to 5 include debug message
开启慢请求:
db.setProfilingLevel(级别)
- 0 不开启
- 1 记录慢sql(默认>100ms)
- 2记录所有命令
db.setProfilingLevel(1,10)
表示开启慢查询,记录超过10ms的语句
查看慢查询:
db.system.profile.find({}}); 查看所有
db.system.profile.find({millis:{$gt:5}});查询大于5ms的记录
db.system.profile.find().sort({$natrual: -1}).limit(3);按插入顺序倒序,显示最近3条
db.system.profile.find().sort({$natural:-1}).limit(1);查看最近的一条记录
{ "ts" : ISODate("2012-05-20T16:50:36.321Z"), "info" : "query test.system.profile reslen:1219
nscanned:8 \nquery: { query: {}, orderby: { $natural: -1.0 } } nreturned:8 bytes:1203", "millis" :
0 }
-ts:时间戳
-info:具体操作
-millis:耗时,毫秒
分析mongodb正在执行的请求:
db.currentOp();
{
"desc" : "conn632530",
"threadId" : "140298196924160",
"connectionId" : 632530,
"client" : "11.192.159.236:57052",
"active" : true,
"opid" : 1008837885,
"secs_running" : 0,
"microsecs_running" : NumberLong(70),
"op" : "update",
"ns" : "mygame.players",
"query" : {
"uid" : NumberLong(31577677)
},
"numYields" : 0,
"locks" : {
"Global" : "w",
"Database" : "w",
"Collection" : "w"
},
....
}
重要关注点
字段 | 含义 |
---|---|
client | 该请求是由哪个客户端发起的。 |
opid | 操作的唯一标识符。 |
secs_running | 表示该操作已经执行的时间,单位为秒。如果该字段返回的值特别大,需要查看请求是否合理。 |
microsecs_running | 表示该操作已经执行的时间,单位为微秒。如果该字段返回的值特别大,需要查看请求是否合理。 |
ns | 该操作目标集合。 |
op | 表示操作的类型。通常是查询、插入、更新、删除中的一种。 |
locks | 跟锁相关的信息 |