如何理解为什么MongoDB有时会长时间阅读?

如何理解为什么MongoDB有时会长时间阅读?,mongodb,performance,nosql,Mongodb,Performance,Nosql,MongoDB版本3.2.1 发动机:钢丝钳 例如,这是一个典型的快速查找查询: { "op" : "query", "ns" : "partkom.cross", "query" : { "find" : "cross", "filter" : { "part_id1" : NumberInt(2148967), "maker_id1" : NumberInt(833)

MongoDB版本3.2.1

发动机:钢丝钳

例如,这是一个典型的快速查找查询:

{ 
    "op" : "query", 
    "ns" : "partkom.cross", 
    "query" : {
        "find" : "cross", 
        "filter" : {
            "part_id1" : NumberInt(2148967), 
            "maker_id1" : NumberInt(833)
        }, 
        "shardVersion" : [
            Timestamp(60, 0), 
            ObjectId("56f50db2ebc50fdfa98e50df")
        ]
    }, 
    "keysExamined" : NumberInt(20), 
    "docsExamined" : NumberInt(20), 
    "cursorExhausted" : true, 
    "keyUpdates" : NumberInt(0), 
    "writeConflicts" : NumberInt(0), 
    "numYield" : NumberInt(0), 
    "locks" : {
        "Global" : {
            "acquireCount" : {
                "r" : NumberLong(2)
            }
        }, 
        "Database" : {
            "acquireCount" : {
                "r" : NumberLong(1)
            }
        }, 
        "Collection" : {
            "acquireCount" : {
                "r" : NumberLong(1)
            }
        }
    }, 
    "nreturned" : NumberInt(20), 
    "responseLength" : NumberInt(1666), 
    "protocol" : "op_command", 
    "millis" : NumberInt(1), 
    "execStats" : {
        "stage" : "FETCH", 
        "nReturned" : NumberInt(20), 
        "executionTimeMillisEstimate" : NumberInt(0), 
        "works" : NumberInt(21), 
        "advanced" : NumberInt(20), 
        "needTime" : NumberInt(0), 
        "needYield" : NumberInt(0), 
        "saveState" : NumberInt(0), 
        "restoreState" : NumberInt(0), 
        "isEOF" : NumberInt(1), 
        "invalidates" : NumberInt(0), 
        "docsExamined" : NumberInt(20), 
        "alreadyHasObj" : NumberInt(0), 
        "inputStage" : {
            "stage" : "SHARDING_FILTER", 
            "nReturned" : NumberInt(20), 
            "executionTimeMillisEstimate" : NumberInt(0), 
            "works" : NumberInt(21), 
            "advanced" : NumberInt(20), 
            "needTime" : NumberInt(0), 
            "needYield" : NumberInt(0), 
            "saveState" : NumberInt(0), 
            "restoreState" : NumberInt(0), 
            "isEOF" : NumberInt(1), 
            "invalidates" : NumberInt(0), 
            "chunkSkips" : NumberInt(0), 
            "inputStage" : {
                "stage" : "IXSCAN", 
                "nReturned" : NumberInt(20), 
                "executionTimeMillisEstimate" : NumberInt(0), 
                "works" : NumberInt(21), 
                "advanced" : NumberInt(20), 
                "needTime" : NumberInt(0), 
                "needYield" : NumberInt(0), 
                "saveState" : NumberInt(0), 
                "restoreState" : NumberInt(0), 
                "isEOF" : NumberInt(1), 
                "invalidates" : NumberInt(0), 
                "keyPattern" : {
                    "maker_id1" : NumberInt(1), 
                    "part_id1" : NumberInt(1)
                }, 
                "indexName" : "maker_id1_1_part_id1_1", 
                "isMultiKey" : false, 
                "isUnique" : false, 
                "isSparse" : false, 
                "isPartial" : false, 
                "indexVersion" : NumberInt(1), 
                "direction" : "forward", 
                "indexBounds" : {
                    "maker_id1" : [
                        "[833, 833]"
                    ], 
                    "part_id1" : [
                        "[2148967, 2148967]"
                    ]
                }, 
                "keysExamined" : NumberInt(20), 
                "dupsTested" : NumberInt(0), 
                "dupsDropped" : NumberInt(0), 
                "seenInvalidated" : NumberInt(0)
            }
        }
    }, 
    "ts" : ISODate("2016-04-06T07:41:56.586+0000"), 
    "client" : "172.16.10.217", 
    "allUsers" : [

    ], 
    "user" : ""
}
但有时此查询比通常情况下需要更长的时间(超过100毫秒)。对我来说太长了

{ 
    "op" : "query", 
    "ns" : "partkom.cross", 
    "query" : {
        "find" : "cross", 
        "filter" : {
            "part_id1" : NumberInt(214251369), 
            "maker_id1" : NumberInt(839)
        }, 
        "shardVersion" : [
            Timestamp(60, 0), 
            ObjectId("56f50db2ebc50fdfa98e50df")
        ]
    }, 
    "keysExamined" : NumberInt(15), 
    "docsExamined" : NumberInt(15), 
    "cursorExhausted" : true, 
    "keyUpdates" : NumberInt(0), 
    "writeConflicts" : NumberInt(0), 
    "numYield" : NumberInt(3), 
    "locks" : {
        "Global" : {
            "acquireCount" : {
                "r" : NumberLong(8)
            }
        }, 
        "Database" : {
            "acquireCount" : {
                "r" : NumberLong(4)
            }
        }, 
        "Collection" : {
            "acquireCount" : {
                "r" : NumberLong(4)
            }
        }
    }, 
    "nreturned" : NumberInt(15), 
    "responseLength" : NumberInt(1286), 
    "protocol" : "op_command", 
    "millis" : NumberInt(145), 
    "execStats" : {
        "stage" : "FETCH", 
        "nReturned" : NumberInt(15), 
        "executionTimeMillisEstimate" : NumberInt(140), 
        "works" : NumberInt(16), 
        "advanced" : NumberInt(15), 
        "needTime" : NumberInt(0), 
        "needYield" : NumberInt(0), 
        "saveState" : NumberInt(3), 
        "restoreState" : NumberInt(3), 
        "isEOF" : NumberInt(1), 
        "invalidates" : NumberInt(0), 
        "docsExamined" : NumberInt(15), 
        "alreadyHasObj" : NumberInt(0), 
        "inputStage" : {
            "stage" : "SHARDING_FILTER", 
            "nReturned" : NumberInt(15), 
            "executionTimeMillisEstimate" : NumberInt(0), 
            "works" : NumberInt(16), 
            "advanced" : NumberInt(15), 
            "needTime" : NumberInt(0), 
            "needYield" : NumberInt(0), 
            "saveState" : NumberInt(3), 
            "restoreState" : NumberInt(3), 
            "isEOF" : NumberInt(1), 
            "invalidates" : NumberInt(0), 
            "chunkSkips" : NumberInt(0), 
            "inputStage" : {
                "stage" : "IXSCAN", 
                "nReturned" : NumberInt(15), 
                "executionTimeMillisEstimate" : NumberInt(0), 
                "works" : NumberInt(16), 
                "advanced" : NumberInt(15), 
                "needTime" : NumberInt(0), 
                "needYield" : NumberInt(0), 
                "saveState" : NumberInt(3), 
                "restoreState" : NumberInt(3), 
                "isEOF" : NumberInt(1), 
                "invalidates" : NumberInt(0), 
                "keyPattern" : {
                    "maker_id1" : NumberInt(1), 
                    "part_id1" : NumberInt(1)
                }, 
                "indexName" : "maker_id1_1_part_id1_1", 
                "isMultiKey" : false, 
                "isUnique" : false, 
                "isSparse" : false, 
                "isPartial" : false, 
                "indexVersion" : NumberInt(1), 
                "direction" : "forward", 
                "indexBounds" : {
                    "maker_id1" : [
                        "[839, 839]"
                    ], 
                    "part_id1" : [
                        "[214251369, 214251369]"
                    ]
                }, 
                "keysExamined" : NumberInt(15), 
                "dupsTested" : NumberInt(0), 
                "dupsDropped" : NumberInt(0), 
                "seenInvalidated" : NumberInt(0)
            }
        }
    }, 
    "ts" : ISODate("2016-04-06T07:27:20.514+0000"), 
    "client" : "172.16.10.217", 
    "allUsers" : [

    ], 
    "user" : ""
}
为什么上一个例子中的估计太长<代码>“ExecutionTimeMillisesOptimate”:数字打印(140)

如何理解它为什么工作145ms?(
“毫秒”:numberprint(145)


所有索引都在内存中。

它说它必须“屈服”三次。可能是并发问题(锁定操作的数量也更高)。我只找到了对partkom.cross集合的请求。有可能找到谁阻止了对partkom.cross collection的读取请求吗?@Saleem正确理解你的术语。结果集是查询的实际结果。您可能指的是工作集。谢谢@MarkusWMahlberg。你是对的。我搞错了。再次尝试执行慢速查询,它应该是快速的。在最初的情况下,MongoDB的工作集中可能没有文档,所以必须从磁盘获取