【MySQL】如何定位慢SQL(带你一文弄懂!)
慢SQL是指执行时间较长的SQL语句。当数据库中的SQL查询或操作花费的时间超过一定阈值时,可以将其称为慢SQL。
目录
如何定位慢sql
什么是慢sql
慢SQL是指执行时间较长的SQL语句。当数据库中的SQL查询或操作花费的时间超过一定阈值时,可以将其称为慢SQL。
定位慢SQL的步骤
1、设置慢查询日志(slow Quary Log):在MySQL中配置文件中启用慢查询日志功能
2、收集慢查询日志:等待一段时间之后,收集并分析慢查询日志,获取到执行时间较长的SQL
3、使用EXPLAIN分析:针对慢SQL语句,使用MySQL的EXPLAIN命令来分析查询执行计划,可以了解SQL语句的索引使用情况、连接类型、数据排序方式等信息,帮助优化查询性能
4、检查索引:检查SQL语句所涉及的表是否存在合适的索引。没有合适的索引可能导致全表扫描或者检索失败,进而影响性能。通过创建、修改或删除索引,可以提高SQL的执行效率
5、优化SQL语句:根据EXPLAIN的分析结果和索引优化情况,对慢SQL语句进行优化。可以通过调整查询条件、重写查询语句、合理使用索引等方式来提高查询性能
6、执行性能测试:在优化之后,进行性能测试并验证优化结果。比较前后SQL执行时间和资源消耗等指标
具体执行步骤
查询是否开启慢查询
mysql> show variables like "%slow%";
//查询是否开启了慢查询
slow_query_log为OFF,表示未开启慢查询,直接set global slow_query_log=on;
slow_query_log_file是存放慢查询日志的地址(set global 只是全局session生效,重启后失效,如果需要以上配置永久生效,需要在mysql.ini(linux my.cnf)中配置)
设置慢查询的时间限制
mysql> show variables like "long_query_time";
value值即为操作时长大于该值后就认为是慢sql
测试时值可以设置得小些
之后查询慢SQL日志就可以定位到具体的慢SQL
Time :日志记录的时间 User@Host:执行的用户及主机 Query_time:查询耗费时间 Lock_time 锁表时间 Rows_sent 发送给请求方的记录条数 Rows_examined 语句扫描的记录条数 SET timestamp 语句执行的时间点
相关SQL查询
查询mysql的操作信息show status 显示全部mysql操作信息
/* 获得mysql的插入次数; */ show status like "com_insert%"; /* 获得mysql的删除次数; */ show status like "com_delete%"; /* 获得mysql的查询次数; */ show status like "com_select%"; /* 获得mysql服务器运行时间; */ show status like "uptime"; /* 获得mysql连接次数; */ show status like 'connections'; /* 服务器启动以来执行时间最长的20条SQL语句; */ SELECT * FROM information_schema.processlist WHERE COMMAND = 'Query' ORDER BY TIME DESC LIMIT 20;
用Explain分析具体的sql语句
id:选择标识符 select_type:表示查询的类型。 table:输出结果集的表 partitions:匹配的分区 type:表示表的连接类型 possible_keys:表示查询时,可能使⽤的索引 key:表示实际使⽤的索引 key_len:索引字段的长度 ref:列与索引的比较 rows:扫描出的行数(估算的行数) filtered:按表条件过滤的⾏百分比 Extra:执行情况的描述和说明
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)