代码改变世界

MongoDB Database Profiler

2016-03-12 19:11  abce  阅读(590)  评论(0编辑  收藏  举报

数据库profiler细粒度收集mongodb的写操作、游标、数据库命令等。可以在数据库级别或者实例级别开启profiling。

profiler将收集到的数据写入system.profile集合中。

 

profiling的级别:

0, 关闭profile,但是mongod会将超过slowOpThresholdMs的值操作写入日志

1, 只抓取slow操作,缺省是超过100毫秒的操作

2, 抓取所有数据库操作

 

 

1.查看是否开启profile功能:

> db.getProfilingLevel()
0
> 

 

2.关闭profile功能:

> db.setProfilingLevel(0)

 

3.设置profile级别:

> db.setProfilingLevel(1,50)
{ "was" : 0, "slowms" : 100, "ok" : 1 }
>

setProfilingLevel的第一个参数是设置当前数据的profiling级别,第二个参数是设置整个mongod实例的慢操作阈值。

 

4.设置整个mongod的profiling级别

#启动时,指定参数profile的值
./mongod --profile=1 --slowms=15

 

示例:

查看profiler数据
数据库的profiler日志信息位于system.profile集合中。

> db.setProfilingLevel(1,50)
{ "was" : 1, "slowms" : 50, "ok" : 1 }
> db.profilingTest.insert({i:1})
WriteResult({ "nInserted" : 1 })
> db.profilingTest.find()
{ "_id" : ObjectId("56e3f62673c59411c4b1234c"), "i" : 1 }
> db.profilingTest.find({$where:'sleep(70)'})
> db.system.profile.find().pretty()
{
        "op" : "insert",
        "ns" : "test.currentOpTest",
        "query" : {
                "insert" : "currentOpTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3ebb713b6892d02827dde"),
                                "i" : 6411413
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(1),
                                "w" : NumberLong(1)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 50,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:13:11.073Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "insert",
        "ns" : "test.currentOpTest",
        "query" : {
                "insert" : "currentOpTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3ebb713b6892d02827de6"),
                                "i" : 6411421
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(1),
                                "w" : NumberLong(1)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 166,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:13:11.252Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "insert",
        "ns" : "test.currentOpTest",
        "query" : {
                "insert" : "currentOpTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3ed7e13b6892d028f10a4"),
                                "i" : 7235419
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(1),
                                "w" : NumberLong(1)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 58,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:20:46.223Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "insert",
        "ns" : "test.currentOpTest",
        "query" : {
                "insert" : "currentOpTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3eea513b6892d02975bee"),
                                "i" : 7778981
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(1),
                                "w" : NumberLong(1)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 149,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:25:41.989Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "insert",
        "ns" : "test.currentOpTest",
        "query" : {
                "insert" : "currentOpTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3f2bf13b6892d02b4401b"),
                                "i" : 9672402
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(1),
                                "w" : NumberLong(1)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 143,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:43:11.201Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "insert",
        "ns" : "test.profilingTest",
        "query" : {
                "insert" : "profilingTest",
                "documents" : [
                        {
                                "_id" : ObjectId("56e3f62673c59411c4b1234c"),
                                "i" : 1
                        }
                ],
                "ordered" : true
        },
        "ninserted" : 1,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(2),
                                "w" : NumberLong(2)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "w" : NumberLong(1),
                                "W" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "w" : NumberLong(1),
                                "W" : NumberLong(1)
                        }
                }
        },
        "responseLength" : 25,
        "protocol" : "op_command",
        "millis" : 88,
        "execStats" : {

        },
        "ts" : ISODate("2016-03-12T10:57:42.769Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "query",
        "ns" : "test.profilingTest",
        "query" : {
                "find" : "profilingTest",
                "filter" : {

                }
        },
        "keysExamined" : 0,
        "docsExamined" : 1,
        "cursorExhausted" : true,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 0,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(2)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "r" : NumberLong(1)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "r" : NumberLong(1)
                        }
                }
        },
        "nreturned" : 1,
        "responseLength" : 145,
        "protocol" : "op_command",
        "millis" : 94,
        "execStats" : {
                "stage" : "COLLSCAN",
                "filter" : {
                        "$and" : [ ]
                },
                "nReturned" : 1,
                "executionTimeMillisEstimate" : 0,
                "works" : 3,
                "advanced" : 1,
                "needTime" : 1,
                "needYield" : 0,
                "saveState" : 0,
                "restoreState" : 0,
                "isEOF" : 1,
                "invalidates" : 0,
                "direction" : "forward",
                "docsExamined" : 1
        },
        "ts" : ISODate("2016-03-12T10:57:55.996Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
{
        "op" : "query",
        "ns" : "test.profilingTest",
        "query" : {
                "find" : "profilingTest",
                "filter" : {
                        "$where" : "sleep(70)"
                }
        },
        "keysExamined" : 0,
        "docsExamined" : 1,
        "cursorExhausted" : true,
        "keyUpdates" : 0,
        "writeConflicts" : 0,
        "numYield" : 1,
        "locks" : {
                "Global" : {
                        "acquireCount" : {
                                "r" : NumberLong(8)
                        }
                },
                "Database" : {
                        "acquireCount" : {
                                "r" : NumberLong(4)
                        }
                },
                "Collection" : {
                        "acquireCount" : {
                                "r" : NumberLong(4)
                        }
                }
        },
        "nreturned" : 0,
        "responseLength" : 109,
        "protocol" : "op_command",
        "millis" : 1030,
        "execStats" : {
                "stage" : "COLLSCAN",
                "filter" : {
                        "$where" : undefined
                },
                "nReturned" : 0,
                "executionTimeMillisEstimate" : 70,
                "works" : 3,
                "advanced" : 0,
                "needTime" : 2,
                "needYield" : 0,
                "saveState" : 1,
                "restoreState" : 1,
                "isEOF" : 1,
                "invalidates" : 0,
                "direction" : "forward",
                "docsExamined" : 1
        },
        "ts" : ISODate("2016-03-12T10:58:07.439Z"),
        "client" : "127.0.0.1",
        "allUsers" : [ ],
        "user" : ""
}
> 

 

5.修改system.profile集合的大小

#1.关闭profiling
> db.setProfilingLevel(0)
#2.删除system.profile集合
> db.system.profile.drop()
#3.创建新得system.profile
> db.createCollection( "system.profile", { capped: true, size:4000000 } )
#4.重新开启profiling功能
> db.setProfilingLevel(1)