Redis和Mongodb查看慢查询

1. Redis查看慢查询:

Redis 的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。

服务器配置有两个和慢查询日志相关的选项:

slowlog-log-slower-than 选项指定执行时间超过多少微秒(1 秒等于 1,000,000 微秒)的命令请求会被记录到日志上。

举个例子, 如果这个选项的值为 100 , 那么执行时间超过 100 微秒的命令就会被记录到慢查询日志; 如果这个选项的值为 500 , 那么执行时间超过 500 微秒的命令就会被记录到慢查询日志; 诸如此类。

slowlog-max-len 选项指定服务器最多保存多少条慢查询日志。

服务器使用先进先出的方式保存多条慢查询日志: 当服务器储存的慢查询日志数量等于 slowlog-max-len 选项的值时, 服务器在添加一条新的慢查询日志之前, 会先将最旧的一条慢查询日志删除。

举个例子, 如果服务器 slowlog-max-len 的值为 100 , 并且假设服务器已经储存了 100 条慢查询日志, 那么如果服务器打算添加一条新日志的话, 它就必须先删除目前保存的最旧的那条日志, 然后再添加新日志。

让我们来看一个慢查询日志功能的例子, 首先用 CONFIG_SET 命令将 slowlog-log-slower-than 选项的值设为 0 微秒, 这样 Redis 服务器执行的任何命令都会被记录到慢查询日志中, 接着将 slowlog-max-len 选项的值设为 5 , 让服务器最多只保存 5 条慢查询日志:

redis> CONFIG SET slowlog-log-slower-than 0
OK

redis> CONFIG SET slowlog-max-len 5
OK

接着, 我们用客户端发送几条命令请求:

redis> SET msg "hello world"
OK

redis> SET number 10086
OK

redis> SET database "Redis"
OK

然后使用 SLOWLOG GET 命令查看服务器所保存的慢查询日志:

redis> SLOWLOG GET
1) 1) (integer) 4               # 日志的唯一标识符(uid)
   2) (integer) 1378781447      # 命令执行时的 UNIX 时间戳
   3) (integer) 13              # 命令执行的时长,以微秒计算
   4) 1) "SET"                  # 命令以及命令参数
      2) "database"
      3) "Redis"

2. 使用Profiling捕捉MongoDb慢查询

返回最近的10条记录

db.system.profile.find().limit(10).sort({ts:-1}).pretty()

返回所有的操作,除command类型的

db.system.profile.find({op: {$ne:'command'}}).pretty()

返回特定集合

db.system.profile.find({ns:'mydb.test'}).pretty()

返回大于5毫秒慢的操作

db.system.profile.find({millis:{$gt:5}}).pretty()

从一个特定的时间范围内返回信息

db.system.profile.find(
                  {
                   ts : {
                         $gt : new ISODate("2015-10-18T03:00:00Z"),
                         $lt : new ISODate("2015-10-19T03:40:00Z")
                        }
                  }
                 ).pretty()

特定时间,限制用户,按照消耗时间排序

db.system.profile.find({
                ts : {
                      $gt : newISODate("2015-10-12T03:00:00Z") ,
                      $lt : newISODate("2015-10-12T03:40:00Z")
                     }
              },
              { user : 0 }
             ).sort( { millis : -1 } )

查看最新的 Profile 记录:

db.system.profile.find().sort({$natural:-1}).limit(1)

显示5个最近的事件

show profile
查看mongodb运行状态

db.serverStatus()

PRIMARY> db.serverStatus()
{
    "host" : "cd9a511a2d0e", #主机名 
    "version" : "2.6.1", ,#版本号 
    "process" : "mongod", #进程名 
    "pid" : NumberLong(41), #进程ID
    "uptime" : 3785943,  #运行时间
    "uptimeMillis" : NumberLong("3785942955"), 
    "uptimeEstimate" : 3755878,
    "localTime" : ISODate("2015-10-16T02:46:27.368Z"),  #当前时间
    "asserts" : {  #各个断言的数量
        "regular" : 0,
        "warning" : 0,
        "msg" : 0,
        "user" : 58,
        "rollovers" : 0
    },
    "backgroundFlushing" : { 
        "flushes" : 63098,  #刷新次数
        "total_ms" : 144997713,  #刷新花费总时间
        "average_ms" : 2297.97637009097,  #平均时间
        "last_ms" : 10913,  #最后一次时间
        "last_finished" : ISODate("2015-10-16T02:45:40.363Z")  #最后刷新时间
    },
    "connections" : {
        "current" : 1444,  #当前连接数
        "available" : 18556,  #可用连接数
        "totalCreated" : NumberLong(2429949)
    },
    "cursors" : {
        "note" : "deprecated, use server status metrics",
        "clientCursors_size" : 1,  #客户端游标大小
        "totalOpen" : 1,  #打开游标数
        "pinned" : 0,
        "totalNoTimeout" : 481,
        "timedOut" : 84  #超时时间
    },
    "dur" : {
        "commits" : 27,
        "journaledMB" : 2.711552,
        "writeToDataFilesMB" : 5.213888,
        "compression" : 0.5158220112430492,
        "commitsInWriteLock" : 0,
        "earlyCommits" : 0,
        "timeMs" : {
            "dt" : 3003,
            "prepLogBuffer" : 1,
            "writeToJournal" : 228,
            "writeToDataFiles" : 10,
            "remapPrivateView" : 2
        }
    },
    "extra_info" : {
        "note" : "fields vary by platform",
        "heap_usage_bytes" : 96529464,  #堆使用情况(字节)
        "page_faults" : 11253067  #页面故障数
    },
    "globalLock" : {
        "totalTime" : NumberLong("3785942955000"),
        "lockTime" : NumberLong("47441423960"),
        "currentQueue" : {
            "total" : 0,
            "readers" : 0,
            "writers" : 0
        },
        "activeClients" : {
            "total" : 0,
            "readers" : 0,
            "writers" : 0
        }
    },
    "indexCounters" : {
        "accesses" : 5980339643,  #索引被访问数
        "hits" : 5980339322,  #索引命中数
        "misses" : 0,  #索引偏差数
        "resets" : 0,  #复位数
        "mi***atio" : 0  #未命中率
    },
    "locks" : {
        "." : {
            "timeLockedMicros" : {
                "R" : NumberLong(1300731481),
                "W" : NumberLong("47441423960")
            },
            "timeAcquiringMicros" : {
                "R" : NumberLong("83350794378"),
                "W" : NumberLong("8842280365")
            }
        },
    },
    "network" : {
        "bytesIn" : 182494603618,  #输入数据(byte)
        "bytesOut" : NumberLong("2936449550300"),  #输出数据(byte) 
        "numRequests" : 600302443 #请求数 
    },
    "opcounters" : {
        "insert" : 214538892,  #插入操作数 
        "query" : 388689,  #查询操作数 
        "update" : 3462611, #更新操作数 
        "delete" : 0, ,#删除操作数 
        "getmore" : 188590632,  #获取更多的操作数 
        "command" : 197825527  #其他命令操作数 
    },
    "opcountersRepl" : {
        "insert" : 1,
        "query" : 0,
        "update" : 0,
        "delete" : 0,
        "getmore" : 0,
        "command" : 0
    },
    "recordStats" : {
        "accessesNotInMemory" : 8377141,
        "pageFaultExceptionsThrown" : 2926497,
        "admin" : {
            "accessesNotInMemory" : 94,
            "pageFaultExceptionsThrown" : 0
        }
    },
    "repl" : {  #复制情况
        "setName" : "c562ca6c-1d72-4c6a-a943-b46fe87e47ca",
        "setVersion" : 105039,
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
            "10.10.1.1:27017",
            "10.10.1.2:27017"
        ],
        "arbiters" : [
            "10.10.1.2:27017"
        ],
        "primary" : "10.10.1.4:27017",
        "me" : "10.10.1.5:27017"
    },
    "writeBacksQueued" : false,
    "mem" : {  #内存情况 
        "bits" : 64,  #64位操作系统
        "resident" : 4430,  #占有物理内存数
        "virtual" : 813370,  #占有虚拟内存数
        "supported" : true, #是否支持内存扩展
        "mapped" : 405498,
        "mappedWithJournal" : 810996
    },
    "metrics" : {
        "cursor" : {
            "timedOut" : NumberLong(84),
            "open" : {
                "noTimeout" : NumberLong(481),
                "pinned" : NumberLong(0),
                "total" : NumberLong(1)
            }
        },
        "document" : {
            "deleted" : NumberLong(0),
            "inserted" : NumberLong(214538892),
            "returned" : NumberLong("6735629965"),
            "updated" : NumberLong(6502807)
        },
        "getLastError" : {
            "wtime" : {
                "num" : 0,
                "totalMillis" : 0
            },
            "wtimeouts" : NumberLong(0)
        },
        "operation" : {
            "fastmod" : NumberLong(3483995),
            "idhack" : NumberLong(39),
            "scanAndOrder" : NumberLong(6)
        },
        "queryExecutor" : {
            "scanned" : NumberLong(107218344),
            "scannedObjects" : NumberLong(107217952)
        },
        "record" : {
            "moves" : NumberLong(1604)
        },
        "repl" : {
            "apply" : {
                "batches" : {
                    "num" : 2,
                    "totalMillis" : 8
                },
                "ops" : NumberLong(1)
            },
            "buffer" : {
                "count" : NumberLong(0),
                "maxSizeBytes" : 268435456,
                "sizeBytes" : NumberLong(0)
            },
            "network" : {
                "bytes" : NumberLong(709),
                "getmores" : {
                    "num" : 18,
                    "totalMillis" : 86108
                },
                "ops" : NumberLong(2),
                "readersCreated" : NumberLong(35)
            },
            "preload" : {
                "docs" : {
                    "num" : 0,
                    "totalMillis" : 0
                },
                "indexes" : {
                    "num" : 1,
                    "totalMillis" : 0
                }
            }
        },
        "storage" : {
            "freelist" : {
                "search" : {
                    "bucketExhausted" : NumberLong(0),
                    "requests" : NumberLong(6551285),
                    "scanned" : NumberLong(12001208)
                }
            }
        },
        "ttl" : {
            "deletedDocuments" : NumberLong(0),
            "passes" : NumberLong(63048)
        }
    },
    "ok" : 1
}

需要关心的地方:
1、 connections当前连接和可用连接数,听过一个同行介绍过,mongodb最大处理到2000个连接就不行了(要根据你的机器性能和业务来设定),所以设大了没意义。设个合理值的话,到达这个值mongodb就拒绝新的连接请求,避免被太多的连接拖垮。

2 、 indexCounters:btree:misses索引的不命中数,和hits的比例高就要考虑索引是否正确建立。

查看连接数

db.serverStatus().connections

获取当前数据库的信息,比如Obj总数、数据库总大小、平均Obj大小等

db.stat()

SECONDARY> db.stats()
{
    "db" : "onroad",  #库名
    "collections" : 9, #集合数
    "objects" : 130751421,  // 记录在数据库中的所有文档总数 
    "avgObjSize" : 559.257981907516,   // 数据库中所有文档的平均大小,等于 dataSize/objects  
    "dataSize" : 73123775840,  // 数据库所有文档的总大小,以字节为单位  ---> 73G
    "storageSize" : 80531728032,  // 分配给每一个文档的磁盘空间    
    "numExtents" : 162,  ,#事件数
    "indexes" : 14, #索引数
    "indexSize" : 19496636768, #索引大小
    "fileSize" : 332680921088,  #文件大小
    "nsSizeMB" : 16,  #命名空间文件的大小 
    "dataFileVersion" : {  #包含 数据库文件的磁盘格式信息 的文档
        "major" : 4, #主要版本号的 磁盘格式数据库的数据文件
        "minor" : 5  #次要版本号
    },
    "extentFreeList" : {
        "num" : 436,
        "totalSize" : 229138838864
    },
    "ok" : 1
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容