2022-10-27 405
我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题。我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题
通过SHOW FULL PROCESSLIST查看问题
SHOW FULL PROCESSLIST相当于select * from information_schema.processlist可以列出正在运行的连接线程,
processlist
说明:
慢查询日志
慢查询日志是MySQL用于记录响应时间超过设置阈值(long_query_time)的SQL语句,默认情况下未开启慢查询日志,需要手动配置。
下面我们要记住几个常用的属性:
我们可以通过show variables like ‘%关键字%’的方式查询我们设置的属性值
slow
我们有两种方式设置我们的属性,一种是set global 属性=值的方式(重启失效),另一种是配置文件(重启生效)
命令方式:
setglobalslow_query_log=1; setgloballong_query_time=1; setglobalslow_query_log_file='mysql-slow.log'
配置文件方式:
slow_query_log='ON' slow_query_log_file=D:/Tools/mysql-8.0.16/slow.log long_query_time=1 log-queries-not-using-indexes
pt-qurey-digest分析慢查询语句
percona-toolkit包含了很多实用强大的mysql工具包,pt-qurey-digest只是其中一个用于分析慢查询日志是工具。需要去官网下载,使用方法也很简单:
./pt-query-digestslow2.log>>slow2.txt
即可得出一个分析结果:
#Query9:0.00QPS,0.00xconcurrency,ID0xF914D8CC2938CE6CAA13F8E57DF04B2Fatbyte499246 #Thisitemisincludedinthereportbecauseitmatches--limit.#Scores:V/M=0.22 #Timerange:2019-07-08T03:56:12to2019-07-12T00:46:28 #Attributepcttotalminmaxavg95%stddevmedian #================================================================#Count869 #Exectime1147s1s3s2s3s685ms2s #Locktime0140ms2ms22ms2ms3ms2ms2ms #Rowssent00000000 #Rowsexamine023.96M225.33k482.77k355.65k462.39k81.66k345.04k #Querysize217.72k2632632632630263 #String:#Databasesxxxx#Hostsxx.xxx.xxx.xxx#Usersroot#Query_timedistribution#1us #10us #100us #1ms #10ms #100ms #1s################################################################ #10s+ #Tables#SHOWTABLESTATUSFROM`xxxx`LIKE'xxxxx_track_exec_channel'\G #SHOWCREATETABLE`xxxx`.`xxxxxxxx_exec_channel`\G #SHOWTABLESTATUSFROM`xxx`LIKE'xxxxx_TRACK_ASSIGN'\G #SHOWCREATETABLE`xxxx`.`xxxxx_EFFECTIVE_TRACK_ASSIGN`\G #SHOWTABLESTATUSFROM`xxx`LIKE'xxxx_task_exec'\G #SHOWCREATETABLE`xxxx`.`xxxxx_task_exec`\G UPDATExxxxxx_effective_track_exec_channelaSETEXEC_CHANNEL_CODE=(SELECTGROUP_CONCAT(DISTINCT(channel_id))FROMxxxxxx_EFFECTIVE_TRACK_ASSIGNWHEREstatusin(1,2,4)ANDidIN(SELECTassgin_idFROMxxxxxx_task_execWHEREtask_id=a.task_id))\G
explain分析SQL语句
上面几点大概的介绍到了几种获取慢查询SQL语句的方式,现在,我们就需要借助explain来分析查找SQL语句慢的原因。explain使用也很简单,直接在SELECT|UPDATE等语句前加上EXPLAIN即可
explain
id
表的执行顺序,复制的sql语句往往会分为很多步,序号越大越先执行,id相同执行顺序从上往下
select_type
数据读取操作的操作类型:
table
数据来源于那张表,关联等复杂查询时会用临时虚拟表
type
检索数据的方式
possible_keys
显示可能使用的索引
Key
实际使用的索引
key_len
索引的长度,一般来说,长度越短越好
ref
列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows
估算查找的结果记录条数
Extra
SQL查询的详细信息
原文链接:https://77isp.com/post/10151.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态