管理和监控
- 监控指标的定义和具体的监控方法
监控指标
- 性能类指标
- 功能类指标
监控方法
- 一般可以通过使用方法计算变量得到指标值,达到监控的目的
QPS
-
查看
Com
变量
-
MySQL提供了
Sum(Com_xxx)
方法用于计算,进一步封装得到了Queries
变量
-
再用
select
计算即可得到QPS
:
TPS
- 同样的,事务,即增删改
并发数
- 还是可以查询变量
连接数
- 查询:
show global status like 'Threads_connected';
- 如果
Threads_connected / max_connections > 0.8
,就要报警!
InnoDB缓存命中率
- 从全局状态计数器查看
- 以上是性能类指标
可用性
- 周期性连接数据库并执行
select @@version
- 执行
mysqladmin
阻塞
- 一般是由于前面的线程对资源加了排它锁造成的,后续的线程得不到资源
- 8.0版本可以使用
sys
库的视图,查阅相关表得到阻塞信息 - 制造阻塞:
- 查询:线程1的update执行完毕,事务还没有结束
- 它也给出了建议,执行
mysql> kill 12; -- 线程2就可以执行了!
死锁
- 两个线程互相锁住了对方的资源,一般是事务引起
- 一般系统会自动对占用资源较少的线程进行回滚,解除死锁
- 可以使用
show engine innodb status
查看 - 更好的方法是,将死锁信息存入死锁表中,我们在
dba
数据库:
- 还有一种方式是记录到错误日志:
- 制造死锁:
- 如图,一开始各自拿着1和2的id资源,然后,线程1要操作
id=2
,线程2要操作id=1
,死锁,但线程2被强了! - 然后我们看两种死锁信息的查看方式:
- 死锁表中,pt工具:
select * from deadlock\G;
- 错误日志:
less mysql-error.log;
- 死锁表中,pt工具:
- 还是存表方便!
慢查询
- 慢查询是很多问题的根源
- 可以查询
information_schema
库的processlist
表,过滤即可得到信息
主从延迟
- 如果有异步复制的集群,还需要监控主从延迟
- 一般可以使用
show slave status
命令,看这个值:
- 但这个值计算的是二进制日志中和当前从节点系统时间的差值,有时候不准确!
- 怎么准确的查看延迟呢?
- 在主库上建一张表(只含有时间字段),启动两个并发线程(pt工具集),一个周期性的向主库表里写数据,一个在从表中查询(时间比较)
- 系统时间一致的前提下,写的时间和查到的时间计算差值!如果有大量数据写入形成阻塞等问题,就会出现延迟,也能观测到,正常状态下延迟为0
主从状态
- 同样还是使用
show slave status;
- 也可以查看
Last_Error