使用 mysql的show命令实现获取,从 connects、buffercache、lock、SQL、statement、Database throughputs、serverconfig 7个方面获取监控数据。
连接数(Connects)
最大使用连接数:
mysql> show status like 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 1 |
+----------------------+-------+
1 row in set (0.64 sec)
当前打开的连接数:
mysql> show status like 'Threads_connected';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 1 |
+-------------------+-------+
1 row in set (0.00 sec)
缓存(bufferCache)
未从缓冲池读取的次数:
mysql> show status like 'Innodb_buffer_pool_reads';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Innodb_buffer_pool_reads | 328 |
+--------------------------+-------+
1 row in set (0.00 sec)
从缓冲池读取的次数:
mysql> show status like 'Innodb_buffer_pool_read_requests';
+----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| Innodb_buffer_pool_read_requests | 1967 |
+----------------------------------+-------+
1 row in set (0.00 sec)
缓冲池的总页数:
mysql> show status like 'Innodb_buffer_pool_pages_total';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| Innodb_buffer_pool_pages_total | 4096 |
+--------------------------------+-------+
1 row in set (0.00 sec)
缓冲池空闲的页数:
mysql> show status like 'Innodb_buffer_pool_pages_free';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_buffer_pool_pages_free | 3735 |
+-------------------------------+-------+
1 row in set (0.00 sec)
缓存命中率计算:(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%
缓存池使用率为:((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%
锁(lock)
锁等待个数:
mysql> show status like 'Innodb_row_lock_waits';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Innodb_row_lock_waits | 0 |
+-----------------------+-------+
1 row in set (0.00 sec)
平均每次锁等待时间:
mysql> show status like 'Innodb_row_lock_time_avg';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Innodb_row_lock_time_avg | 0 |
+--------------------------+-------+
1 row in set (0.00 sec)
查看是否存在表锁:
mysql> show open TABLES where in_use>0;
Empty set (2.35 sec)
有数据代表存在锁表,空为无表锁。
备注:锁等待统计得数量为累加数据,每次获取得时候可以跟之前得数据进行相减,得到当前统计得数据。
SQL
查看 mysql 开关是否打开:
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set, 1 warning (2.32 sec)
ON 为开启状态,如果为 OFF,set global slow_query_log=1 进行开启:
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (2.65 sec)
mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set, 1 warning (0.00 sec)
查看 mysql 阈值:
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)
根据页面传递阈值参数,修改阈值 set global long_query_time=0.1。
查看 mysql 慢 sql 目录:
mysql> show variables like 'slow_query_log_file';
+---------------------+----------------------------------------------------------------------+
| Variable_name | Value |
+---------------------+----------------------------------------------------------------------+
| slow_query_log_file | D:\phpstudy_pro\MySQL5.7.26\-slow.log |
+---------------------+----------------------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
s:是表示按照何种方式排序
c:访问次数
i:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
t:即为返回前面多少条数据
g:后边搭配一个正则匹配模式,大小写不敏感
- 访问次数最多的20个sql语句
mysqldumpslow -s c -t 20 1d0a52e2683d-slow.log
- 返回记录集最多的20个sql
mysqldumpslow -s r -t 20 1d0a52e2683d-slow.log
- 得到按照时间排序的前10条里面含有做了连接的查询SQL
mysqldumpslow -s t -t 10 -g "left join" /data/mysql/mysql-slow.log /
注:此语句通过 jdbc 执行不了,属于命令行执行。
备注:当 mysqldumpslow 命令执行失败时,将慢日志同步到本地进行格式化处理。
statement
insert 数量:
mysql> show status like 'Com_insert';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_insert | 0 |
+---------------+-------+
1 row in set (0.00 sec)
delete 数量:
mysql> show status like 'Com_delete';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_delete | 0 |
+---------------+-------+
1 row in set (0.00 sec)
update 数量:
mysql> show status like 'Com_update';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_update | 0 |
+---------------+-------+
1 row in set (0.00 sec)
select 数量:
mysql> show status like 'Com_select';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select | 1 |
+---------------+-------+
1 row in set (0.00 sec)
吞吐(Database throughputs)
发送吞吐量:
mysql> show status like 'Bytes_sent';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Bytes_sent | 889 |
+---------------+-------+
1 row in set (0.00 sec)
接收吞吐量:
mysql> show status like 'Bytes_received';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| Bytes_received | 446 |
+----------------+-------+
1 row in set (0.00 sec)
数据库参数(serverconfig)
mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 120 |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)