百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

MySQL合集-常用监控指标及监控方法

wptr33 2025-05-21 16:53 7 浏览


对之前生产中使用过的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语句

编辑

相关推荐

数据库基础:mysql主从集群搭建

文章首发于微信公众号:java架构师进阶之路前言:Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库的所有的...

Mysql-cluster搭建

前期准备准备五台虚拟机:ip地址分别为:192.168.1.211管理节点192.168.1.64SQL节点192.168.1.65SQL节点192.168.1.70数据节点192.168.1...

mysql 主从数据库搭建

一、创建目录在dev/htb下面创建文件夹master01htb]#mkdirmysql/master01-p2)进入master01...

从零搭建高可用的 MySQL 主从复制架构(基于 Linux 实战指南)

背景在生产环境中,单点MySQL数据库容易成为性能瓶颈或单点故障源。搭建MySQL主从复制架构,可以实现读写分离、高可用,提升系统的整体稳定性与扩展性。...

「MySQL 8」MySQL 5.7都即将停只维护了,是时候学习一波MySQL 8了

MySQL8新特性选择MySQL8的背景:MySQL5.6已经停止版本更新了,对于MySQL5.7版本,其将于2023年10月31日停止支持。后续官方将不再进行后续的代码维护。另外,...

Mysql启动选项和配置文件

Mysql启动选项和配置文件Mysql启动方式下面的启动命令都需要依赖在Linux环境下配置的Mysql环境变量...

centos安装mysql操作手册

1.下载Mysql首先去Mysql官网下载安装包,网址https://dev.mysql.com/downloads/mysql/推荐大家下载Linux通用版本的,便于管理安装位置,也方便一台服务器...

MySQL安装

MySQL的安装过程因操作系统的不同而有所差异。以下是在几种常见操作系统上安装MySQL的基本步骤:Windows下载MySQL:访问MySQL官方网站下载页面:MySQLDownloads...

MySQL数据库安装教程

前言今天就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。...

MySQL学到什么程度?才有可以在简历上写精通

前言如今互联网行业用的最多就是MySQL,然而对于高级Web面试者,尤其对于寻找30k下工作的求职者,很多MySQL相关知识点基本都会涉及,如果面试中,你的相关知识答的模糊和不切要点,基...

一起免费考 MySQL OCP 认证啦

前言:在1995年,首个MySQL版本发布,为庆祝MySQL诞辰30周年,OracleUniversity在限定期间内推出了多个MySQL的免费培训课程与认证,其中也包括My...

教程2 | 制作用户管理系统

一、项目简介用户管理系统是一个基于C/S模式的小型管理系统,使用了GUI技术来实现管理系统的页面效果,该管理系统可以对用户的信息,比如姓名、年龄、密码和地址等进行增删改查操作。用户管理系统通过JDBC...

红帽Linux中安装mysql8详细步骤

注意:我写的解压路径和截图路径不一致,仅供参考先前往官网下载mysql8下载地址:https://dev.mysql.com/downloads/选择指定版本和系统下载命令...

MySQL主从配置

主从原理MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的。...

mysql的主从搭建以及实现主从切换方法

主从搭建的方法:a.准备两台服务器...