Mysql排查指南

一、排查占用CPU较高的SQL

1. 通过top获取mysql的pid

2. 使用pidstat -t -p <mysql_pid> 1 命令查看占用cpu较高线程TID:

-t:显示选择任务的线程的统计信息外的额外信息

-p:指定进程号

3. 连接数据库,通过select * from performance_schema.threads where THREAD_OS_ID=TID \G 的sql语句查找到相应的sql文本

二、排查慢SQL

2.1  开启慢查询日志

    1. 查看是否开启慢日志查询:show variables like 'slow_query_log';

未开启,设置:set global slow_query_log=1;

     2. 设置日志记录SQL的超时时间,long_query_time默认为10秒。

查看当前的超时时间:show variables like 'long_query_time';

设置超时时间:set globallong_query_time=1;(单位:秒)

      3. 查看慢查询日志存放路径:show global variables like 'show_query_log_file';

2.2 分析慢查询日志

①日志详解

tail -n 50 path日志路径

关注以下几个参数:

Query_time:sql执行时间

Lock_time:在服务器阶段等待表锁的时间

Rows_sent:查询返回的行数

Rows_examined:查询检查的行数,越长耗时越久

②mysqldumpslow使用搭配参数:

s:表示按照何种方式排序

c:访问次数

l:锁定时间

r:返回记录

t:查询时间

al:平均锁定时间

t:返回前面多少条数据

g:后面搭配一个正则表达式

备注:日志较大,结合more使用

1)得到按时间排序的前10条SQL,时间是所记录次数的总时间:mysqldumpslow -s -t 10 path(日志路径)

示例:mwsqldumpslow -s -t 10 /mysqllog/mysql3306/log/mysql-slow.log | more

2)得到返回记录集最多的10个SQL:mysqldumpslow -s r -t 10 path

3)得到访问次数最多的10个SQL:mysqldumpslow -s c -t 10 path

4)得到按时间排序的前10条里面含有左连接的查询:mysqldumpslow -s t -t 10 -g "left join" path

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值