MySQL合集-常用监控指标及监控方法
wptr33 2025-05-21 16:53 4 浏览
对之前生产中使用过的MySQL数据库监控指标做个小结。
指标分类 | 指标名称 | 指标说明 |
性能类指标 | QPS | 数据库每秒处理的请求数量 |
TPS | 数据库每秒处理的事务数量 | |
并发数 | 数据库实例当前并行处理的会话数量 | |
连接数 | 连接到数据库会话的数量 | |
缓存命中率 | 查询命中缓存的比例 | |
高可用指标 | 可用性 | 数据库是否可以正常对外服务 |
阻塞 | 当前阻塞的会话数 | |
慢查询 | 慢查询情况 | |
主从延迟 | 主从延迟时间 | |
主从状态 | 主从链路是否正常 | |
死锁 | 查看死锁信息 |
【QPS指标】
show global status where variable_name in ('Queries', 'uptime');
QPS = (Queries2 -Queries1) / (uptime2 - uptime1)
编辑
【TPS指标】
show global status where variable_name in ('com_insert' , 'com_delete' , 'com_update', 'uptime');
事务数TC ≈'com_insert' , 'com_delete' , 'com_update'
TPS ≈ (TC2 -TC1) / (uptime2 - uptime1)
【并发数】
show global status like 'Threads_running';
编辑
【连接数】
当前连接数:
show global status like 'Threads_connected';
最大连接数:
show global status like 'max_connections';
生产中配置报警阈值:Threads_connected / max_connections > 0.8
【缓存命中率】
innodb缓冲池查询总数:
show global status like 'innodb_buffer_pool_read_requests';
innodb从磁盘查询数:
show global status like 'innodb_buffer_pool_reads';
生产中配置报警阈值:(
innodb_buffer_pool_read_requests - innodb_buffer_pool_reads) /
innodb_buffer_pool_read_requests > 0.95
编辑
【可用性】
方法1:周期性连接数据库并执行 select @@version;
方法2:mysqladmin -u数据库用户名 -p数据库密码 -h数据库实例IP ping
编辑
【阻塞】
MySQL5.7之前:
select b.trx_mysql_thread_id as '被阻塞线程', b.trx_query as '被阻塞SQL', c.trx_mysql_thread_id as '阻塞线程', c.trx_query as '阻塞SQL', (unix_timestamp()-unix_timestamp(c.trx_started)) as '阻塞时间' from information_schema.innodb_lock_waits a join information_schema.innodb_trx b on a.requesting_trx_id=b.trx_id join information_schema.innodb_trx c on a.blocking_trx_id=c.trx.id where(unix_timestamp()-unix_timestamp(c.trx_started))>阻塞秒数
MySQL5.7及之后:
为方便查询阻塞指标,MySQL将2张表join构造了一个view sys.innodb_lock_waits,查询语句得以大大简化。
select waiting_pid as '被阻塞线程', waiting_query as '被阻塞SQL', blocking_pid as '阻塞线程', blocking_query as '阻塞SQL', wait_age as '阻塞时间', sql_kill_blocking_query as '建议操作' from sys.innodb_lock_waits where(unix_timestamp()-unix_timestamp(wait_started))>阻塞秒数
编辑
【慢查询】
方法1:开启慢查询日志。my.inf
slow_query_log=on slow_query_log_file=存放目录 long_query_time=0.1秒
log_queries_not_using_indexes=on
注:只对新建连接生效,实时生效使用命令set global 上述配置项。
方法2:
select * from information_schema.'processlist';
编辑
【主从延迟】
方法1:
show slave status;
编辑
问题:
该方法是基于relaylog的时间与master的时间差值,并不太准,例如大事务时,主从延时已发生,但relaylog还未生成。
方法2:使用Percona的pt-heartbeat工具
- Master后台周期写入:
pt-heartbeat --user=Master用户名 --password=Master密码 --h MasterIP --create-table --database 测试库名 --updatte --daemonize --interval=1
--create-table 在Master上创建心跳监控表heartbeat,通过更新该表知道主从延迟的差距。
--daemonize 后台执行。
--interval=1 默认1秒执行一次。
- Slave后台周期同步读取:
pt-heartbeat --user=Slave用户名 --password=Slave密码 --h SlaveIP --database 库名 --monitor --daemonize --log /slave_lag.log
--monitor参数是持续监测并输出结果
【主从状态】
show slave status;
编辑
【死锁】
方法1:查看最近一次死锁信息:
show engine innodb status;
编辑
方法2:使用Percona的pt-deadlock-logger工具
1.打开死锁打印全局开关
set global innodb_print_all_deadlocks=on;
2.使用pt-deadlock-logger工具
监控到的死锁结果可以输出到文件、指定表、或者界面打印。
编辑
pt-deadlock-logger h=数据库IP,u=数据库用户名,p=数据库密码
输出结果非常详尽:
server:数据库服务器地址,即死锁产生的数据库主机
ts:检测到死锁的时间戳
thread:产生死锁的线程id,这个id和show processlist里面的线程id是一致的
txn_id:innodb的事务ID
txd_time:死锁检查到前,事务执行时间
user:执行transcation的用户名
hostname:客户端主机名
ip:客户端ip
db:发生死锁的DB名
tbl:死锁发生的表名
idx:产生死锁的索引名(在上面这个demo里面, 我们直接走的主键,加的记录锁)
lock_type:锁的类型(记录锁,gap锁,next-key锁)
lock_mode:锁模式(S,X)
wait_hold:是否等着锁释放,一般死锁都是两个wait
victim:该会话是否做了牺牲,终止了执行
query:造成死锁的SQL语句
编辑
- 上一篇:一篇解释很好的数据库的乐观锁与悲观锁
- 下一篇:RPA数据库功能应用及时间戳获取
相关推荐
- 针对 MySQL 数据库的 HikariCP 数据库连接池 配置详解
-
HikariCP是当前性能最优异的数据库连接池之一,尤其适用于高并发场景。以下是针对MySQL数据库的HikariCP配置详解,包含常用参数及其优化建议。HikariCP是当前性能最优异的...
- MySQL 数据同步神器 - Canal 入门篇
-
前言想必做过商品服务都是将商品相关的信息和价格保存在数据库中,例如...
- MySQL之慢查询日志分析
-
一、慢查询设置与测试1、慢查询介绍MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的语句。...
- 「MySQL学习」MySQL的变量
-
MySQL的变量分为四种:局部变量、用户变量、会话变量和全局变量,其中局部变量只存在于函数和存储过程,这里不多了解。其中会话变量和全局变量在MySQL中统称为系统变量用户...
- MySQL日志篇
-
今天我们介绍一下MySQL中特别重要的一项内容——日志!MySQL中日志有很多,我们前文提到的redolog、undolog、以及今天要提到的binlog。...
- MySQL--视图
-
介绍视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所...
- MySQL中like会不会走索引?
-
先说结论:like"%关键字":不会;like"%关键字%":不会like"关键字%":会说明:...
- MySQL正则 rlike(regexp)
-
在MySQL中,like、rlike和regexp都不区分大小写,如果需要区分,可以在WHERE后添加关键字段binary1.LIKE可以使用以下两个通配符:%...
- 开源文档预览项目 kkFileView (9.9k star) ,快速入门
-
kkFileView是一款文件文档在线预览解决方案,采用流行的SpringBoot框架构建,易于上手和部署。该项目基本支持主流办公文档的在线预览,包括但不限于doc、docx、xls、xls...
- 帮你打造一个私有化的在线个人文档系统
-
前言最近开发的过程中总是需要找寻一些资料,但是某些资料或者是某段可用的代码,已经忘记放在了哪个文档中了,看着电脑上搜索出来的几百个txt文件,我陷入了一阵无力感中,于是我想能不能搞个在线文档,就像“语...
- Container 命令ctr、crictl 命令使用说明
-
一、ctr命令使用Container命令ctr,crictl的用法版本:ctrcontainerd.io1.4.3containerd相比于docker,多了...
- Docker常用命令(2)
-
目录Docker重启策略配置容器环境变量...
- 快速搭建自己的镜像仓库
-
搭建docker镜像仓库1.准备找一台机器为镜像仓库的主机.创建好存放镜像数据文件的目录.例如...
- 整合 kkfile 实现文件预览
-
一、简介...
- 隐私计算FATE-核心概念与单机部署
-
一、说明Fate是一个工业级联邦学习框架,所谓联邦学习指的就是可以联合多方的数据,共同构建一个模型;...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git pull 之后本地代码被覆盖 解决方案
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)