当前位置:网站首页>手把手教你定位线上MySQL慢查询问题,包教包会
手把手教你定位线上MySQL慢查询问题,包教包会
2022-08-03 19:04:00 【肥肥技术宅】
1. 慢查询日志的作用
慢查询日志默认不开启,建议手动开启,方便我们定位线上问题。
执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题,方便我们进行SQL性能调优。
2. 慢查询日志的配置
2.1 查看是否开启了慢查询日志
show variables like 'slow_query_log'; 复制代码
默认是OFF,不开启,可以手动开启。
2.2 开启慢查询日志
一种方法是可以使用MySQL命令开启:
set global slow_query_log=1; 复制代码
另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。
修改配置文件my.cnf,加入下面一行命令
slow_query_log = ON
2.3 设置慢查询日志的阈值
慢查询日志的阈值默认是10,单位是秒。
对于线上服务来说,10秒太长了,我们可以手动修改。
一种是通过MySQL命令修改,比如修改为1秒:
set long_query_time=1; 复制代码
另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。
修改配置文件my.cnf,加入下面一行命令
long_query_time = 1
2.4 修改慢查询日志位置
使用MySQL命令查看慢查询日志位置:
show variables like '%slow_query_log_file%'; 复制代码
想要修改慢查询日志位置,可以修改MySQL配置文件,重新MySQL服务后,开启。
修改配置文件my.cnf,加入下面一行命令
slow_query_log_file = /usr/local/mysql/data/localhost_slow.log
2.5 记录更多慢查询SQL
默认情况下管理语句是不会被记录到慢查询日志中,管理语句包括ALTER TABLE、 ANALYZE TABLE、 CHECK TABLE、 CREATE INDEX、 DROP INDEX、 OPTIMIZE TABLE和 REPAIR TABLE等。
管理语句也是非常重要的,如果想要被记录,可以通过MySQL命令修改:
set global log_slow_admin_statements=ON; 复制代码
默认情况下,不使用索引的语句,也是不会被记录的。
够坑人吧!一不留神就掉坑里了,不记录不使用索引的语句,还要慢查询日志干嘛?
想要记录不使用索引的语句,可以通过命令修改:
set global log_queries_not_using_indexes=ON; 复制代码
3. 慢查询日志的使用
手动造一条慢SQL,测试一下效果,user表中有100万表数据:
select * from user; 复制代码
然后看一下慢查询日志文件的内容:
cat /usr/local/mysql/data/localhost_slow.log 复制代码
SQL语句和执行时间都被记录了。
4. 分析慢查询日志
有时候慢查询日志较多,手动查看起来并不是很方便,好在MySQL提供了分析慢查询日志的工具 mysqldumpslow 。
常用参数有 -s: 表示按何种方式排序: c: 访问次数 l: 锁定时间 r: 返回记录 t: 查询时间 al: 平均锁定时间 ar: 平均返回记录数 at: 平均查询时间 -t: 返回前面多少条的数据; 复制代码
4.1 查询返回结果最多的10条SQL:
mysqldumpslow -s r -t 10 /usr/local/mysql/data/localhost_slow.log
4.2 查询耗时最长的10条SQL:
mysqldumpslow -s t -t 10 /usr/local/mysql/data/localhost_slow.log
边栏推荐
猜你喜欢
技术开发人员常用的安全浏览器
Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
MySQL如何一劳永逸的永久支持输入中文
Word另存为PDF后无导航栏解决办法
Solution for no navigation bar after Word is saved as PDF
Confused!Ali was abused on the one hand, but was fortunate to be promoted to Huawei's technology, and successfully got the offer, with an annual salary of 40w
PreFixSum前缀和
梅科尔工作室-14天华为培训六
online 方式创建索引触发trigger怎么办?
[笔记]机器学习之前言介绍
随机推荐
设备树基本原理与操作方法
Execute the mysql script file in the docker mysql container and solve the garbled characters
LineSegmentTree线段树
力扣刷题之移动零
WEB 渗透之SSRF
【Azure 事件中心】使用Azure AD认证方式创建Event Hub Consume Client + 自定义Event Position
技术开发人员常用的安全浏览器
丙二醇二乙酸酯(Propylene Glycol Diacetate)
Unity获取canvas 下ui 在屏幕中的实际坐标
阿里巴巴政委体系-第七章、阿里政委培育
2022年最新的Android面试大厂必考174题(附带详细答案)
mysql跨库关联查询(dblink)
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单
idea——同一项目开启多个实例(不同端口)
基于ck+redash构建MySQL慢日志+审计日志展示平台
阿里二面:多线程间的通信方式有几种?举例说明
字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构,助你快速进大厂!!
ROS仿真环境搭建
Intelligent security contract - delegatecall (2)
Confused!Ali was abused on the one hand, but was fortunate to be promoted to Huawei's technology, and successfully got the offer, with an annual salary of 40w