011.MongoDB性能监控
一 MongoDB 监控
1.1 监控概述
1.2 模拟插入数据
[root@client ~]# mongo --host 172.24.8.71 -u admin -p admin
> use admin
> db.grantRolesToUser( "admin",[{ role: "dbOwner",db:"mydb" }])
> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
二 相关命令
2.1 mongostat 命令
inserts/s #每秒插入次数
query/s #每秒查询次数
update/s #每秒更新次数
delete/s #每秒删除次数
getmore/s #每秒执行getmore次数
command/s #每秒的命令数,比以上插入、查找、更新、删除的综合还多,还统计了别的命令
dirty #仅仅针对WiredTiger引擎,脏数据字节的缓存百分比
used #仅仅针对WiredTiger引擎,正在使用中的缓存百分比
flushs/s #每秒执行fsync将数据写入硬盘的次数。
mapped/s #所有的被mmap的数据量,单位是MB,
vsize #虚拟内存使用量,单位MB
res #物理内存使用量,单位MB
faults/s #每秒访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
locked % #被锁的时间百分比,尽量控制在50%以下吧
idx miss % #索引不命中所占百分比。如果太高的话就要考虑索引是不是少了
q t|r|w #当Mongodb接收到太多的命令而数据库被锁住无法执行完成,它会将命令加入队列。这一栏显示了总共、读、写3个队列的长度,都为0的话表示mongo毫无压力。高并发时,一般队列值会升高。
qr #客户端等待从MongoDB实例读数据的队列长度
qw #客户端等待从MongoDB实例写入数据的队列长度
ar #执行读操作的活跃客户端数量
aw #执行写操作的活客户端数量
conn #当前连接数,是qr,qw,ar,aw的总和
time #时间戳
net_in #MongoDB实例的网络进流量
net_out #MongoDB实例的网络出流量
[root@client ~]# mongo --host 172.24.8.71 -u admin -p admin
> use admin
> db.grantRolesToUser( "admin",[{ role: "clusterMonitor",db:"admin" }])
[root@client ~]# mongostat -h 172.24.8.71 -u admin -p admin --authenticationDatabase admin --discover -n 30 3

2.2 mongotop 命令
ns #数据库命名空间,后者结合了数据库名称和集合。
db #数据库的名称。名为 . 的数据库针对全局锁定,而非特定数据库。
total #mongod在这个命令空间上花费的总时间。
read #在这个命令空间上mongod执行读操作花费的时间。
write #在这个命名空间上mongod进行写操作花费的时间。
[root@client ~]# mongotop -h 172.24.8.71 -u admin -p admin --authenticationDatabase admin -n 30 3

-n 30 3:表示输出30次,每次休眠3秒钟。
2.3 profile
ts #时间戳
info #具体的操作
millis #操作所花时间,毫秒
[root@client ~]# mongo --host 172.24.8.71 -u admin -p admin
> use mydb
> db.setProfilingLevel(2) #开启profile
{ "was" : 2, "slowms" : 100, "sampleRate" : 1, "ok" : 1 }
> db.getProfilingLevel()
2
> use mydb
switched to db mydb
> db.system.profile.find().sort({$natural:-1}).pretty() #查看Profile日志
> db.system.profile.count() #查看系统中的慢查询数量
6
2.4 serverStatus
> use mydb
> db.serverStatus() #只显示部分内容
{
"uptime" : 21.0, #表示此实例进程已激活的总时间,单位是秒
"localTime" : ISODate("2017-07-09T05:28:17.007Z"), #表示实例所在服务器的当前时间
"globalLock" : {
"totalTime" : NumberLong(20935000), #数据库启动后运行的总时间,单位是微秒
"currentQueue" : { #表示因为锁引起读写队列数
"total" : 0,
"readers" : 0, #等待读锁的操作数
"writers" : 0 #等待写锁的操作数
},
"activeClients" : { #连接的激活客户端写操作的总数
"total" : 10,
"readers" : 0, #激活客户端读操作数
"writers" : 0 #激活客户端写操作数
}
},
"mem" : { #表示当前内存使用情况
"bits" : 64, #mongod运行的目标机器的架构
"resident" : 96, #当前被使用的物理内存总量,单位MB
"virtual" : 271, #MongoDB进程映射的虚拟内存大小,单位MB
"supported" : true, #表示系统是否支持可扩展内存
"mapped" : 0, #映射数据文件所使用的内存大小,单位MB
"mappedWithJournal" : 0 #映射journaling所使用的内存大小,单位MB
},
}
2.5 db.stats()、db.c.stats()
> use mydb
> db.stats()
{
"db" : "mydb", #当前数据库
"collections" : 2, #集合数量
"views" : 0,
"objects" : 50007, #对象(记录)数量
"avgObjSize" : 53.88963545103685, #对象平均大小
"dataSize" : 2694859, #所有数据总大小
"storageSize" : 917504, #数据占磁盘大小
"numExtents" : 0, #所有集合占用的区间总数
"indexes" : 1, #索引数
"indexSize" : 491520, #索引大小
"fsUsedSize" : 2733277184,
"fsTotalSize" : 27375431680,
"ok" : 1
}
2.6 db.collection.stats()
> use mydb
switched to db mydb
> db.user.stats()
2.7 db.currentOp()
> db.currentOp()
2.8 rs.status()
|
分段
|
说明
|
|
set
|
当前副本集名称
|
|
date
|
执行命令时间
|
|
myState
|
当前节点的状态(角色)
|
|
syncingTo
|
同步源
|
|
heartbeatIntervalMillis
|
心跳间隔
|
|
members
|
节点成员
|
|
members.id
|
成员编号
|
|
members.name
|
成员名称
|
|
members.heath
|
健康状态,1-true,0-false
|
|
members.state
|
成员状态(角色)1-主节点 2-备节点 7-仲裁节点
|
|
members.stateStr
|
成员状态名
|
|
members.uptime
|
成员启动运行时长
|
|
members.optime
|
成员oplog时间戳(字段ts)
|
|
members.optimeDate
|
成员oplog时间(格式化)
|
|
members.lastHeartbeat
|
当前节点对成员的最后一个心跳
|
|
members.lastHeartbeatRecv
|
当前节点收到该成员的最后一个心跳
|
|
members.pingMs
|
当前节点到该成员的回路时长
|
|
members.syncingTo
|
成员同步源
|
|
members.electionTime
|
主节点选举时间戳(ms)
|
|
members.electionDate
|
主节点选举时间(格式化)
|
- 检查每个成员的state/stateStr确认是否正常;
- 检查每个成员的optimeDate差异,查看复制延迟;
- 检查lastHeartbeat、pingMs值排查网络延迟问题
configured oplog size: 20480MB
log length start to end: 589911secs (163.86hrs)
oplog first event time: Tue Apr 03 2018 19:37:14 GMT+0800
oplog last event time: Tue Apr 10 2018 15:29:05 GMT+0800
now: Tue Apr 10 2018 15:30:18 GMT+0800
source: 135.177.126.24:10001
syncedTo: Tue Apr 10 2018 15:32:45 GMT+0800
0 secs (0 hrs) behind the primary
三 motop监控工具
3.1 motop安装
[root@client ~]# yum -y install pymongo #安装以来
[root@client ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
[root@client ~]# python get-pip.py
[root@client ~]# yum -y install git
[root@client ~]# pip install git+https://github.com/tart/motop.git
3.2 motop操作
3.3 配置
address:服务器的地址(必需)
username:登陆用户名
password:登陆用户密码
status:显示状态(默认开启)
replicationInfo:显示复制状态(默认值:开启)
replicaSet:显示副本集的状态(默认值:开启)
operations:显示操作(默认值:开启)
replicationOperations:不断展现主和从的复制操作(默认值:开启)
“DEFAULT”:是特殊的部分,参数可以在本节中设置为默认值。
3.4 监控
[root@client ~]# motop -h #查看帮助
[root@client ~]# vi /etc/motop.conf
[MongoDB01]
address=172.24.8.71
username=admin
password=admin
replicationInfo=off [MongoDB02]
address=172.24.8.72
username=admin
password=admin
replicationInfo=off
四 影响性能相关因素
4.1 锁
4.2 内存
4.3 连接数
五 Web图形界面
5.1 开启Web
011.MongoDB性能监控的更多相关文章
- 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.se ...
- MongoDB性能监控
1.mongostat 查看运行中的mongodb实例的统计信息 重要指标说明: getmore: 通常发生在结果集比较大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取 ...
- Mongodb性能调优
摘要 1. Mongodb 适用场景简介 2. Mongodb 性能监控与分析 3. Mongodb 性能优化建议 关于Mongodb的几个大事件 1.根据美国数据库知识大全官网发布的DB热度排行,M ...
- MongoDB 运行状态、性能监控,分析
这篇文章的目的是让你知道怎么了解你正在运行的Mongdb是否健康.转载自http://tech.lezi.com/archives/290 mongostat详解 启动mongodb监控,通过下面命令 ...
- MongoDB运行状态、性能监控,分析
转载自这位仁兄:地址 mongostat详解 mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果你发现数据库突然变慢或者 ...
- mongodb可以通过profile来监控数据 (mongodb性能优化)
mongodb可以通过profile来监控数据 (mongodb性能优化) 开启 Profiling 功能 ,对慢查询进行优化: mongodb可以通过profile来监控数据,进行优化. 查看 ...
- mongodb的监控与性能优化
一.mongodb的监控 mongodb可以通过profile来监控数据,进行优化. 查看当前是否开启profile功能用命令 db.getProfilingLevel() 返回level等级,值为 ...
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
- MYSQL使用PMM进行性能监控
简介Percona监视和管理(PMM)是一个用于管理和监视MySQL和MongoDB性能的开源平台.它是由Percona与托管数据库服务.支持和咨询领域的专家合作开发的. PMM是一个免费的开源解决方 ...
随机推荐
- CodeForces999A-Mishka and Contest
A. Mishka and Contest time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Openfiler存储搭建
说明: Openfiler是一个基于Linux的开源免费网络存储管理操作系统,通过WEB界面对存储磁盘进行管理,支持iSCSI.NFS 等网络存储协议. 目前最新版本:openfileresa-2.9 ...
- 基于python的种子搜索网站(三)项目部署
项目部署过程 系统要求:ubuntu 16.04(或以上) 环境搭建和配置,必须严格按照以下步骤来安装部署!如有问题可以咨询(weixin:java2048) 安装部分 安装nginx sudo ap ...
- Day 06 流程控制和爬虫基础2
目录 if 判断 单分支结构 双分支结构 多分支结构 for循环 for循环的基本用法 for循环嵌套 break continue 爬虫基础2 爬取豆瓣TOP250 爬取豆瓣数据接口(异步数据) 爬 ...
- 【Selenium】selenium.common.exceptions.ElementClickInterceptedException
出现问题: 使用代码点击提交按钮: driver.find_element(By.CSS_SELECTOR,"#submit").click() 出现如下异常: selenium. ...
- 浅析Java常量池
Java常量池 Java常量池其实分为两种:静态常量池和运行时常量池 1.静态常量池 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类. ...
- Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性
目录 案例讲解: 一. 表单指令 1.重点: 补充 2.单选框 3.单一复选框 4.多复选框 二 . 条件指令 v-if/v-show ... v-clock 三 . 循环指令 string arra ...
- django查询中模糊的知识点,filter(blog=blog),filter(username=username).first()--这两者只需一招让你分清QuerySet对象,和用户字典对象
只需一招让你分清QuerySet对象,和用户字典对象 article_list = models.Article.objects.filter(blog=blog) user_obj = models ...
- python基础知识第四篇(元组)
元组 list列表 li[11,22,33,44]列表和元组的区别:元素不可被修改,不可被增加或者删除(一级元素),列表则相反 tuple元组 tu=(111,222,333,444) 支持索引取值 ...
- Linux中的 date 使用
01. 日期格式字符串列表 %H 小时(以00-23来表示). %I 小时(以01-12来表示). %K 小时(以0-23来表示). %l 小时(以0-12来表示). %M 分钟(以00-59来表示) ...