mysql慢查询分析

1.生成实验数据

使用sql蠕虫复制足够多的数据

insert into payment (name,amount,address) select name,amount,addrss from payment

2.慢日志查询设置

(1)开启慢查询日志

set global slow_query_log = on; 
show variables like 'slow_query_log';

设置完毕后,查询是否开启

set global slow_query_log = on; 

 

(2)设置慢查询临界点

set long_query_time = 1;

(3)设置慢查询存储的方式

set globle log_output = file;

(4)查询慢查询的配置信息

show variables like '%quer%';

 

3.慢查询测试

(1)执行sql

select * from payment where payment_id<100000;

(2)查看日志

日志文件通过参数得知在/var/lib/mysql目录中

查看该日志文件

 

可以看到刚才插入数据的sql和查询sql都被记录起来了,且sql执行时间都超过了1s

字段说明
Query_timeSQL的查询时间
Lock_time锁定时间
Rows_sent所发送的行数
Rows_examined锁扫描的行数
SET timestamp=1565697747sql执行时间
select * from paymentsql执行语句

4.慢查询日志分析工具

(1)mysqldumpslow

显示出慢查询日志中最慢的10条sql
mysqldumpslow -t 10 /var/lib/mysql/iz2ze6p8tou7n39ta90oziz-slow.log

注意:在mysql数据库所在的服务器上,而不是在mysql>命令行中

(2)pt-query-digest

快速安装

wget https://www.percona.com/downloads/percona-toolkit/2.2.16/RPM/percona-toolkit-2.2.16-1.noarch.rpm && yum localinstall -y  percona-toolkit-2.2.16-1.noarch.rpm

查看服务器信息

pt-summary

查看磁盘开销使用信息

pt-diskstats

查看mysql数据库信息

pt-mysql-summary --user=root --password=root

分析慢查询日志

pt-query-digest /var/lib/mysql/iz2ze6p8tou7n39ta90oziz-slow.log

查找mysql的从库和同步状态

pt-slave-find --host=localhost --user=root --password=root

查看mysql的死锁信息

pt-deadlock-logger --user=root --password=root localhost

从慢查询日志中分析索引使用情况

pt-index-usage slow_20131009.log

查找数据库表中重复的索引

pt-duplicate-key-checker --host=localhost --user=root --password=root

查看mysql表和文件的当前活动IO开销

pt-ioprofile

pt-find查找数据库里大于2G的表:

pt-find --user=root --password=root --tablesize +2G

5.如何分析

(1)查询次数多且每次查询占用时间长的sql

通常为pt-query-digest分析的前几个查询;该工具可以很清楚的看出每个SQL执行的次数及百分比等信息,执行的次数多,占比比较大的SQL

(2)IO大的sql

注意pt-query-digest分析中的Rows examine项。扫描的行数越多,IO越大。

(3)未命中的索引的SQL

注意pt-query-digest分析中的Rows examine (扫描行数)和Rows Sent(发送行数)的对比。如果扫描行数远远大于发送行数,说明该SQL的索引命中率不高,对于这种SQL,我们要重点进行关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值