MongoDB 的 慢查询记录储存在 system.profile 里,默认情况下是关闭的,我们可以在数据库级别上或者是节点级别上配置。
有两种方式可以控制 Profiling 的开关和级别,第一种是直接在启动参数里直接进行设置。
启动MongoDB时加上–profile=级别 即可。
也可以在客户端调用db.setProfilingLevel(级别)
命令来实时配置。可以通过db.getProfilingLevel()
命令来获取当前的Profile
级别。
use dbName;
#如果db有密码
#db.auth('name','passwd');
#记录所有db的命令,默认记录的超时时间是100ms
db.setProfilingLevel(2);
#或者正在开启慢查询的时候指定记录信息的超时时间,下面deo是记录超过10ms的语句
#db.setProfilingLevel( 1 , 10 );
{
"was" : 0 , "ok" : 1}
db.getProfilingLevel()
上面的级别可以取0,1,2 三个值,他们表示的意义如下:
0
: 不开启1
: 记录慢命令 (默认为>100ms)
2
: 记录所有命令列出执行时间长于某一限度(5ms)的 Profile 记录:
db.system.profile.find( {
millis : {
$gt : 5 } } )
{
"ts" : "Thu Jan 29 2009 15:21:27 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 exception bytes:53" , "millis" : 88}
查看最近3条 慢请求,{$natrual: -1} 代表按插入顺序逆序
db.system.profile.find().sort({
$natrual: -1}).limit(3)
查看最新的 Profile 记录:
db.system.profile.find().sort({
$natural:-1}).limit(1)
{
"ts" : ISODate("2012-05-20T16:50:36.321Z"), "info" : "query test.system.profile reslen:1219
nscanned:8 \nquery: { query: {}, orderby: { $natural: -1.0 } } nreturned:8 bytes:1203", "millis" :
0 }
3个字段的意义:
ts
:时间戳info
:具体的操作millis
:操作所花时间,毫秒demo
通过查询 age < 10
的数据来观察索引的时候情况
db.tableName.find({
age:{
$lt:10}}).explain();
语法
db.tableName.createIndex(keys, options)
demo
db.tableName.createIndex({
"title":1})
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
db.tableName.createIndex({
"title":1,"description":-1})
mongo索引相关限制
集合中索引不能超过64个
索引名的长度不能超过128个字符
一个复合索引最多可以有31个字段
查看集合索引
db.tableName.getIndexes()
查看集合索引大小
db.tableName.totalIndexSize()
删除指定索引
db.tableName.dropIndex("索引名称")
删除集合所有索引
db.col.dropIndexes()