如何在MongoDB中测量查询运行时间

时间:2018-04-12 16:14:25

标签: mongodb mongodb-query query-performance

我正在尝试测量MongoDB中的查询运行时间。

步骤: 我在mongoDB中设置了分析并运行了我的查询 当我确实显示Profile时,我得到了以下输出。

db.blogpost.find({post:/.* NATO .*/i})

blogpost是集合名称,我在查询中搜索了“NATO”关键字。

输出:它取出了20条记录,在运行查询以获得执行结果后,我得到了以下输出:

在输出中,我可以看到3个时间值,其中一个与MySQL中的持续时间相似?

query   blogtrackernosql.blogpost **472ms** Wed Apr 11 2018 20:37:54  
command:{  
        "find" : "blogpost",  
        "filter" : {  
                "post" : /.* NATO .*/i  
        },  
        "$db" : "blogtrackernosql"  
} cursorid:99983342073 keysExamined:0 docsExamined:1122 numYield:19 locks:{  
        "Global" : {  
                "acquireCount" : {  
                        "r" : NumberLong(40)  
                }  
        },  
        "Database" : {  
                "acquireCount" : {  
                        "r" : NumberLong(20)  
                }  
        },  
        "Collection" : {  
                "acquireCount" : {  
                        "r" : NumberLong(20)  
                }  
        }  
} nreturned:101 responseLength:723471 protocol:op_msg planSummary:COLLSCAN  
 execStats:{  
        **"stage"** : "COLLSCAN",  
        "filter" : {  
                "post" : {  
                        "$regex" : ".* NATO .*",  
                        "$options" : "i"  
                }  
        }, 
        "nReturned" : 101,  
        **"executionTimeMillisEstimate" : 422**,  
        "works" : 1123,  
        "advanced" : 101,  
        "needTime" : 1022,  
        "needYield" : 0,  
        "saveState" : 20,  
        "restoreState" : 19,  
        "isEOF" : 0,  
        "invalidates" : 0,  
        "direction" : "forward",  
        "docsExamined" : 1122  
} client:127.0.0.1 appName:MongoDB Shell allUsers:[ ] user:  

1 个答案:

答案 0 :(得分:0)

这......

NSNotificationCenter.defaultCenter().addObserver(self, selector:"checkForReachability:", name: ReachabilityChangedNotification, object: nil);
self.reachability = Reachability.reachabilityForInternetConnection();
self.reachability.startNotifier();



 func checkForReachability(notification:NSNotification)
    {
        let networkReachability = notification.object as Reachability;
        var remoteHostStatus = networkReachability.currentReachabilityStatus()

        if (remoteHostStatus.value == NotReachable.value)
        {
            print("Not Reachable")
        }
        else if (remoteHostStatus.value == ReachableViaWiFi.value)
        {
            print("Reachable via Wifi")
        }
        else
        {
            print("Reachable")
        }
    }

...是MongoDB的估计该查询在MongoDB服务器上执行所需的时间。

这......

"executionTimeMillisEstimate" : 422

...必须是端到端的时间,包括一些客户端部分(例如,形成查询并将其发送到MongoDB服务器)以及从MongoDB服务器返回到客户端的数据传输时间。

所以:

  • 472ms是总开始时间
  • 422ms是在内部 MongoDb服务器
  • 所花费的时间

注意:输出还告诉您MongoDB必须扫描整个集合(query blogtrackernosql.blogpost 472ms )才能执行此查询。 FWIW,它必须扫描集合的原因是你使用不区分大小写的"stage": "COLLSCAN"。根据{{​​3}}:

  

不区分大小写的正则表达式查询通常无法有效地使用索引。