美文网首页
MongoDB 发生globalLock导致连接、执行异常

MongoDB 发生globalLock导致连接、执行异常

作者: ivan_cloud | 来源:发表于2018-10-17 12:06 被阅读95次

现象:

MongoDB 发生大面积连接、执行异常

监控:

其它服务器资源都很正常,但有大量globalLock

原因分析:

1、执行db.serverStatus().globalLock

{

    "totalTime" : NumberLong(5064962000),

    "currentQueue" : {

        "total" : NumberInt(13),

        "readers" : NumberInt(9),

        "writers" : NumberInt(4)

    },

    "activeClients" : {

        "total" : NumberInt(236),

        "readers" : NumberInt(5),

        "writers" : NumberInt(23)

    }

}

currentQueue > 0,activeClients > 0,其它服务器资源都很正常,因此说明单个请求的处理时间太慢需要优化。

2、使用db.currentOp()查看活跃连接的执行情况,可了解连接语法执行的具体情况。

3、查询慢操作连接:

var j = 0;

var _DEF_TIME = 10; //设置慢查询时间

var currentOPs = db.currentOP().inprog;

for (var i in currentOPs) {

    var op = "";

    var opid;

    var memProg = {}

    if (typeof(undefined) == typeof(currentOPs[i])) {

        continue;

    }

    memProg = currentOPs[i];

    op = memProg.op;

    opid = memProg.opid;

    // if (op == "query")

    {  // 此处过滤类型为查询,如果是更新操作为"update"

        if (memProg.hasOwnProperty('secs_running')) {

            var useTime = memProg.secs_running;

            if (useTime >= _DEF_TIME) {

                print("index: " + i + ", secs_running " + useTime + "s, op: " + memProg.op + ", ns: " + memProg.ns + ", msg: " + memProg.msg);

            }

        }

    }

}

其中的msg信息,可查看到索引创建进度:

4、使用脚本kill查询时间超过指定时间的慢查询连接:

var j = 0;

var _DEF_TIME = 10; //设置慢查询时间 

var currentOPs = db.currentOP().inprog;

for (var i in currentOPs) { 

    var op = ""; 

    var opid; 

    var memProg = {} 

    if (typeof(undefined) == typeof(currentOPs[i])) { 

        continue; 

    } 

    memProg = currentOPs[i]; 

    op = memProg.op; 

    opid = memProg.opid; 

    print(i); 

    if (op == "query") {  // 此处过滤类型为查询,如果是更新操作为"update"

        if (memProg.hasOwnProperty('secs_running')) { 

            var useTime = memProg.secs_running; 

            if (useTime >= _DEF_TIME) { 

                db.killOp(opid); 

                j++; 

                print("killed " + j + " Query Operation!"); 

            } 

        } 

    } 

}

解决方案:

使用阿里云的CloudDBA生成索引推荐,优化查询效率低的语法:

合并推荐索引,实际的key应该是最左边的字段,course_id字段应该可以不用建独立索引:

参考:

MongoDB serverStatus.globalLock 深入解析

相关文章

  • MongoDB 发生globalLock导致连接、执行异常

    现象: MongoDB 发生大面积连接、执行异常 监控: 其它服务器资源都很正常,但有大量globalLock 原...

  • MongoDb最大连接数限制

    1.mongodb数据库没有配置连接数,应用异常导致连接数激增,致使MongoDB数据库服务的load的值非常高....

  • javascript异常处理

    1、异常:当javascript引擎执行javascript代码时,发生了错误,导致程序停止运行 2、异常抛出:当...

  • Group coordinator is unavailable

    发生这种错误一般是客户端连接异常导致 public class RetriableCommitFailedExce...

  • JavaScript异常处理与事件管理

    1.异常: 当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行 2.异常抛出:...

  • E. Java Exception Handling

    1.Java异常是什么? 异常是一种错误,甚至可以在程序运行中发生,打断正常的执行流程。异常会导致不同的情况发生,...

  • shell 统计所有docker容器的 MongoDB连接数

    需求 我们的MongoDB 经常发生连接数用完,导致报错 所以想看下哪个docker容器占用最多,好排查问题但是手...

  • 关于 Power Query M语言异常的理解

    异常是由程序在运行过程中出现的各种无法预知的错误导致的、当这种错误发生后程序的执行会中断在异常位置而不会继续执行后...

  • 异常处理的机制

    异常处理的机制 try:可能发生异常的代码 except:如果发生异常 放过异常直接执行except finall...

  • MongoDB - 连接

    启动 MongoDB 服务 执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的...

网友评论

      本文标题:MongoDB 发生globalLock导致连接、执行异常

      本文链接:https://www.haomeiwen.com/subject/zpwlzftx.html