MongoDB CPU 利用率高的排查办法
Tags: MongoDB
遇到这个问题,99.9999% 的可能性是「用户使用上不合理导致」,本文主要介绍从应用的角度如何排查 MongoDB CPU 利用率高的问题。
Step1: 分析数据库正在执行的请求
用户可以通过 Mongo Shell 连接,并执行 db.currentOp() 命令,能看到数据库当前正在执行的操作,如下是该命令的一个输出示例,标识一个正在执行的操作。重点关注几个字段:
- client:请求是由哪个客户端发起的?
- opid:操作的opid,有需要的话,可以通过 db.killOp(opid) 直接干掉的操作;
- secs_running/microsecs_running: 这个值重点关注,代表请求运行的时间,如果这个值特别大,就得注意了,看看请求是否合理;
- query/ns: 这个能看出是对哪个集合正在执行什么操作;
lock*:还有一些跟锁相关的参数,需要了解可以看官网文档,本文不做详细介绍。
12345678910111213141516171819202122{"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"},....},本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!