当前位置:网站首页>手把手教你定位线上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
边栏推荐
猜你喜欢
随机推荐
讯方实训云平台——加速教育高质量发展的“数字底座”!
MySQL如何一劳永逸的永久支持输入中文
ROS仿真环境搭建
阿里巴巴政委体系-第八章、阿里政委工作方法论
如何理解即时通讯开发移动网络的“弱”和“慢”
LineSegmentTree线段树
MySQL详细学习教程(建议收藏)
Compose原理-compose中是如何实现事件分法的
MySQL【变量、流程控制与游标】
力扣刷题之合并两个有序数组
MySQL 啥时候用表锁,啥时候用行锁?这些你都应该知道吧
Handler 源码解析
红日安全内网渗透靶场-VulnStack-1
sys文件系统
基于ck+redash构建MySQL慢日志+审计日志展示平台
201712-3 CCF Crontab满分题解
Postgresql-xl global snapshot and GTM code walking (branch line)
WEB 渗透之SSRF
Climbing Stairs (7/30)
MySQL超详细安装教程 手把手教你安装MySQL到使用MySQL 最简单的MySQL安装方式,这种方式装,卸载也简单