MySQL监控

Posted 韩小北(韩凯)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL监控相关的知识,希望对你有一定的参考价值。

Mysql 监控
mysql大多数问题出现在SQL语句和索引上。

一、慢查询日志分析

show variables like \'%slow%\'     /*查看是否开启了慢查询日志*/
set @@global.slow_query_log = ON    /*开启全局慢查询日志,重启mysql失效*/

如果想重启之后有效,需要修改mysql的配置文件my.cnf。在my.cnf的最后添加上:

1 slow_query_log      //开启慢查询日志
2 slow_query_log_file=/usr/local/mysql/data/zhoucentos-slow.log //日志的位置
3 long_query_time=0.1     //设定时间为0.1秒,如果查询时间大于0.1的sql语句都会被记录到 日志文件里。

Linux系统使用mysql自带命令mysqldumpslow查看

可通过 mysqldumpslow –help查看帮助信息

  -s,是order的排序,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序

  -a,倒序排列

  -t,是top n的意思,即为返回前面多少条的数据

  -g,后边可以写一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令分别可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。

图例中的命令:mysqldumpslow –s at- t 50 host-slow.log 显示出耗时最长的50个SQL语句的执行信息

以Count: 32  Time=0.26s (8s)  Lock=0.00s (0s)  Rows=10.0 (320), wos_20120719[wos_20120719]@2host 为例:

Count: 32  该SQL总共执行32次

Time = 0.26s (8s)  平均每次执行该SQL耗时0.26秒,总共耗时32(次)*0.26(秒)=8秒。

Lock=0.00s(0s)   lock时间0秒

Rows =10.0(320)  每次执行SQL影响数据库表中的10行记录,总共影响 10(行)*32(次)=320行记录

批注:1次查询10条记录所用时间   小于  1次1条查询10次所用时间!

二、连接数

1 show variables like \'%connections%\' /*查看最大的连接数*/
2 
3 show status like \'%connection%\' /*查看连接的状态*/
4 Connections :试图连接MySQL服务器的次数; 5 max_connections:整个MySQL允许的最大连接数;
1 show status like \'%thread%\'
2 其中:
3 Threads_connected 当前打开的连接的数量
4 Threads_cached 线程缓存内的线程的数量 
5 Threads_created 创建的线程数 
6 Threads_running 激活的(非睡眠状态)线程数 

三、缓冲池

1 show variables like \'%buffer_pool_size%\' 默认是134兆,如果服务器的内存是32G,设置为20G对服务器的性能提升是非常大的!
2 show status like \'%buffer%\';
3 其中:
4 Innodb_buffer_pool_reads:缓冲池中没有读到数据,而从磁盘内读取的次数
5 Innodb_buffer_pool_read_requests:来缓冲池中读数据的次数
6 Innodb_buffer_pool_pages_total:缓冲池的总页数(内存是以页为单位)
7 Innodb_buffer_pool_pages_free:缓冲池中处于空闲状态的页数

命中率:innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

========================================================================================
四、查询缓存(一般默认)
show variables like \'%query_cache%\'; 查询缓存的本身存在一种算法,如果更新了查询语句就直接去硬盘读取数据,本身也消耗一些性能,所以查询缓存的size很小
show status like \'%Qcache%\'
查询缓存百分比:Query_cache_hits=(Qcache_hits/(Qcache_hits+Qcache_inserts))*100%

五、线程缓存(连接池,一般默认)
show variables like \'%thread%\'
show status like \'connections\'  试图连接mysql的次数
show status like \'%thread%\'
线程缓存命中率:Threads_Cache_Hit=(Connections-Threads_created)/Connections*100%

六、表锁和行锁
show status like \'%lock%\';
存储引擎:早期mysql用的,MyISAM(表锁),现在都用Innodb(行锁)
MyISAM:支持表锁
Innodb:支持行锁

以上是关于MySQL监控的主要内容,如果未能解决你的问题,请参考以下文章

mysql监控

zabbix监控mysql-如何使用zabbix自带的模板监控-nagios监控mysql主从

如何监控mysql表记录变化

如何监控mysql表的变化

实战案例:Zabbix监控MySQL主机

MySQL 监控 第01期:Prometheus+Grafana 监控 MySQL