近期人员变动以及业务调整,使我能够接触到mysql服务器,并且版本升级到mysql8,这样对于线上的使用情况需要做一些监控,整理了一些常用的监控命令,哪里说得不对,还望大佬们多多指正。
一、命令总览
- SHOW STATUS:查看系统运行的实时状态,便于dba查看mysql当前运行的状态,做出相应优化,动态的,不可认为修改,只能系统自动update。(例:SHOW STATUS LIKE '关键字';)
- SHOW VARIABLES:查看系统参数,系统默认设置或者dba调整优化后的参数,静态的。可以通过set或者修改my.cnf配置文件修改。(例:SHOW VARIABLES LIKE '关键字';)
二、命令实操
1、查看当前连接数:SHOW STATUS LIKE 'Thread_%';
- Threads_cached:被缓存的线程的个数
- Threads_running:处于激活状态的线程的个数
- Threads_connected:当前连接的线程的个数
- Threads_created:总共被创建的线程的个数
2、缓存命中率:TCH = (1 - ( Threads_created / Connections ) ) * 100,如果TCH数小于90%,说明命中率不高,创建连接耗费了不少时间,可以考虑加大 thread_cache_size 变量值来增大Threads_cached的数量。
- Connections = SHOW GLOBAL STATUS LIKE 'Connections';
3、线程缓存大小:show global variables like 'thread_cache_size';
- 如果是短连接,可以适当设大一点。因为短连接往往需要不停地创建和销毁。如果设大一点,重新创建和销毁的数量会小一些,对性能提升有较大的作用。
- 如果是长连接,如果是长连接,可以适当设置小一点。
- 物理内存设置规则:可以大致根据物理内存来设置,1G-->8、2G-->16、3G-->32、4G-->64
- 设置方法:mysql> set global thread_cache_size = 16或者编辑/etc/my.cnf 更改/添加 thread_concurrency = 16
4、mysql查询次数:
- SHOW GLOBAL STATUS LIKE 'Qcache_hits'; 查询缓存命中次数
- SHOW GLOBAL STATUS LIKE 'Com_select'; 总的查询语句量
- SHOW GLOBAL STATUS LIKE 'Com_insert'; 执行插入语句量
- SHOW GLOBAL STATUS LIKE 'Com_update'; 执行更新语句量
- SHOW GLOBAL STATUS LIKE 'Com_delete'; 执行删除语句量
- SHOW GLOBAL STATUS LIKE 'Com_replace'; 执行字符串替换语句量
- SHOW GLOBAL STATUS LIKE 'Uptime'; 本次启动服务到现在执行的时长
5、QPS每秒查询量:
- 基于Questions(Questions表示发送给服务器的查询数量)计算QPS:QPS = Questions / Uptime,Questions=SHOW GLOBAL STATUS LIKE 'Questions';
- 基于com_*(Com_select表示查询语句执行数量)计算QPS:QPS = Com_select / Uptime;
- 使用Questions进行计算QPS时,人为拉高了计算结果。相对来说,使用Com_select这种计算方式更符合实际一些。
6、TPS每秒事务量:TPS = (Com_commit + Com_rollback) / Uptime
- Com_commit:SHOW GLOBAL STATUS LIKE 'Com_commit';
- Com_rollback:SHOW GLOBAL STATUS LIKE 'Com_rollback';
7、R/W Ratio读写比:优化数据库的重要依据,读的多优化读,写的多优化写
- R/W = (Com_select + Qcache_hits) / (Com_insert + Com_update + Com_delete + Com_replace) * 100
8、慢查询:SQPM = Slow_queries/(Uptime/60) S/Q = Slow_queries/Questions
- SHOW VARIABLES LIKE "long_query_time"; 查看慢查询时间
- SHOW STATUS LIKE "%slow_queries%"; 查看慢查询配置情况
- SHOW VARIABLES LIKE "%slow%"; 查看慢查询日志路径
- set global slow_query_log = ON; 开启慢日志
- set global long_query_time = 2; 设置慢查询时间 2s
- set global slow_query_log_file='....log'; 设置慢查询日志路径
- set global log_queries_not_using_indexes = ON; 设置无索引的查询,设置后没有使用索引的查询也会被认为是慢查询
- SHOW GLOBAL STATUS LIKE 'Slow_queries'; 慢速查询
9、无索引join查询: FJPM = Select_full_join / (Uptime / 60) 没有使用索引而造成的全表扫描的join,需要优化索引。
- SHOW GLOBAL STATUS LIKE 'Select_full_join';
10、buffer命中率: (1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100,目标是95%-99%
- SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
- SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
11、Table Cache表缓存:table_cache应该大于Open_tables小于Opened_tables
- SHOW GLOBAL STATUS LIKE 'Open_tables';
- SHOW GLOBAL STATUS LIKE 'Opened_tables';
- SHOW GLOBAL STATUS LIKE 'table_cache';
更多参数详解参照https://www.cnblogs.com/zengkefu/p/5634841.html