• MongoDB出现CPU飚高,如何强制停止正在执行的操作


      如果发出了一个执行耗时很长的任务给MongoDB服务器,客户端强制终止会导致任务依然在服务器端执行。

      这时MongoDB提供了查询和管理正在执行任务的方式。

    // db.currentOp()   获得当前的所有`in progressing`的操作,包括insert/query/update/remove/getmore/command等
    > db.currentOp(true)

      返回的数据结构如下:

    { "inprog" :   
            [   
                {  
                            "opid" : 3434473,//操作的id  
                            "active" : <boolean>,//是否处于活动状态  
                            "secs_running" : 0,//操作运行了多少秒  
                            "op" : "<operation>",//具体的操作行为,包括(insert/query/update/remove/getmore/command)  
                            "ns" : "<database>.<collection>",//操作的命名空间,如:数据库名.集合名  
                            "query" : {//具体的操作语句  
                            },  
                            "client" : "<host>:<outgoing>",//连接的客户端信息  
                            "desc" : "conn57683",//数据库连接描述  
                            "threadId" : "0x7f04a637b700",//线程id  
                            "connectionId" : 57683,//数据库连接id  
                            "locks" : {//锁的相关信息  
                                    "^" : "w",  
                                    "^local" : "W",  
                                    "^<database>" : "W"  
                            },  
                            "waitingForLock" : false,//是否在等待并获取锁,  
                            "msg": "<string>"  
                            "numYields" : 0,  
                            "progress" : {  
                                    "done" : <number>,  
                                    "total" : <number>  
                            }  
                            "lockStats" : {  
                                    "timeLockedMicros" : {//此操作获得以下锁后,把持的微秒时间  
                                            "R" : NumberLong(),//整个mongodb服务实例的全局读锁  
                                            "W" : NumberLong(),//整个mongodb服务实例的全局写锁  
                                            "r" : NumberLong(),//某个数据库实例的读锁  
                                            "w" : NumberLong() //某个数据库实例的写锁  
                                    },  
                                    "timeAcquiringMicros" : {//此操作为了获得以下的锁,而耗费等待的微秒时间  
                                            "R" : NumberLong(),//整个mongodb服务实例的全局读锁  
                                            "W" : NumberLong(),//整个mongodb服务实例的全局写锁  
                                            "r" : NumberLong(),//某个数据库实例的读锁  
                                            "w" : NumberLong()//某个数据库实例的写锁  
                                    }  
                            }  
                    },  
                    .....  
                   
            ]   
        }
    

     

    找到其中耗时secs_running很长的操作,有可能是异常操作,确认后可> db.killOp(opid)
  • 相关阅读:
    Vmware 添加虚拟磁盘
    2019-2020-2 《网络对抗技术》 Exp3 免杀原理与实践
    Docker 容器更换软件源
    Docker 查看容器 Linux 版本
    OpenMediaVault 5 进阶配置(四) Portainer 管理 Docker
    Portainer 中文文档:部署
    树莓派 部署 Docker 数据库容器
    通过Cookie统计上次网页访问时间
    用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)
    删掉双系统
  • 原文地址:https://www.cnblogs.com/yaohonv/p/mongodb_kill_ops.html
Copyright © 2020-2023  润新知