数据库管理的关键是要能提前发现问题,而要想提前发现问题,必须要有监控系统,开源的系统有
- Zabbix
- Nagios
不过这些系统,一般都是直接使用,重点是监控了什么指标,下面聚焦下具体是什么指标,而不是什么用了什么监控软件。
MySQL常用监控指标
非功能指标:
- QPS:数据库每秒钟处理的请求数量,包括DML,DDL这样才能体现数据库的性能
- TPS:数据库每秒处理的事务数量
- 并发数:数据库当前的并行处理的会话数量
- 连接数:连接到数据库会话的数量
- 缓存命中率:InnoDB的缓存命中率
功能指标:
- 可用性:数据库是否正常对外提供服务
- 阻塞:当前是否有阻塞的会话,锁住了别人需要的资源
- 死锁:当前事务是否产生了死锁,相互锁住了对方的资源
- 慢查询:实时慢查询监控
- 主从延迟:在异步复制架构中需要
QPS=(Queries1 - Queries2)/时间间隔
show global status where variable_name in ('Queries','uptime');
// 第一次查询
Queries 3532976857
Uptime 32769425
// 第二次查询
Queries 3532977031
Uptime 32769452
QPS = ( 3532977031 - 3532976857 ) / (32769452 - 32769425) = 6.44
TPS=sum(删除,增加,更新)/时间间隔
show global status where variable_name in ('com_insert','com_update','com_delete','uptime');
Com_delete 1721
Com_insert 3404633923
Com_update 30505256
Uptime 32769668
Com_delete 1721
Com_insert 3404633970
Com_update 30505314
Uptime 32769706
TPS = ((3404633970 - 3404633923) + (30505314 - 30505256 ) ) / (32769706 - 32769668) = 2.76
并发数,一般并发数越多,负载越大, 最大连接数为配置的max_connection变量
show global status where variable_name in ('Threads_running','Threads_connected');
Threads_connected 5
Threads_running 3
InnoDB缓存命中率,缓存命中就可以省去读磁盘
(innodb_buffer_pool_read_requests - innodb_buffer_pool_reads) / innodb_buffer_pool_read_requests
innodb_buffer_pool_read_requests:从缓存池中读取的次数
Innodb_buffer_pool_reads: 表示从物理磁盘读取的次数
show global status where variable_name like 'innodb_buffer_pool_read%'
Innodb_buffer_pool_read_requests 122914434867
Innodb_buffer_pool_reads 47710383
命中率 = (122914434867 - 47710383) / 122914434867 = 0.99
非功能指标
可用性,周期的连接服务器执行select @@version
阻塞,多个线程对同一个资源加排它锁导致的
- 大于5.7版本,查sys.innodb_lock_waits表,wait_started > 多少秒
死锁:
- Pt-deadlock-logger工具监控, 更直观一些
- set global innodb_print_all_deadlocks=on,打印的日志比较多,需要自己分析
慢查询:通过日志监控,也可以查information_schema
.processlist 表
主从延迟
show slave status;
网友评论