MySQL慢查询日志优化实战

1、定位执行慢的SQL:慢查询日志

慢查询日志是记录在MySQL中响应时间超过阈值的语句,具体是说超过long_query_time(他的值默认是10)值的SQL。主要作用是帮助发现那些执行时间特别长的SQL查询,并有针对性的进行优化,从而提高系统整体效率。

默认情况下,MySQL数据库没有开启慢查询日志,如果使用的话需要提前开启。但是如果不是调优需要的话,一般不建议启动该参数,这会带来一定的性能影响。

1.1 开启慢查询日志参数

(1)开启slow_query_log

sql 复制代码
set global slow_query_log = on;

同时,也能看到慢查询日志的文件在/var/lib/mysql/master-slow.log中。

(2)修改long_query_time阈值

将阈值时间设置为1秒,同时对global以及session设置时间。

sql 复制代码
set global long_query_time = 1;

set long_query_time=1;

这是临时修改的,如果想永久设置就必须去配置文件中设置。

1.2 查看慢查询的条数

sql 复制代码
SHOW GLOBAL STATUS LIKE '%Slow_queries%';

1.3 测试分析

(1)测试

新建两个查询,查询时间都大于我们设置的阈值1秒:

sql 复制代码
SELECT * FROM student WHERE stuno = 3455655;
sql 复制代码
SELECT * FROM student WHERE name = 'uPSQCp';

(2)分析

查看慢查询的个数:

sql 复制代码
show status like 'slow_queries'; # 2

1.4 慢查询日志分析工具 mysqldumpslow

sql 复制代码
mysqldumpslow -s t -t 5 /var/lib/mysql/master-slow.log

参数说明:-s是表示按照何种方式排序(t代表查询时间);-t代表返回前面多少条数据;-a表示不把数字抽形成N,字符串抽象成S。如需了解其他用法,可通过执行"mysqldumpslow --help"命令查看详细帮助信息。

1.5 关闭慢查询日志

情况一:如果是在配置文件永久性设置的

sql 复制代码
# ①
slow_query_log=OFF

# ②把slow_query_log一项注释掉 或 删除
# slow_query_log=OFF

然后重启MySQL服务(systemctl restart mysqld)。

情况二:如果是临时性修改的

sql 复制代码
SET GLOBAL slow_query_log=off;

重启MySQL服务,可以查看慢查询日志功能信息:

sql 复制代码
SHOW VARIABLES LIKE '%slow%';
#以及
SHOW VARIABLES LIKE '%long_query_time%';

1.6 删除慢查询日志文件

(1)手动删除慢查询日志文件

(2)重新生成查询日志文件

sql 复制代码
mysqladmin -uroot -p flush-logs slow

如果设置完还没有发现重置后的日志文件,是因为当前状态的慢查询状态是OFF。

2、查看SQL执行成本 SHOW PROFILE

(1)启动show profile

sql 复制代码
 set profiling = 'ON';

(2)当前会话有哪些profiles

sql 复制代码
show profiles;

(3)查看最近一次查询的开销

sql 复制代码
show profile;

(4)查看具体资源消耗

sql 复制代码
show profile cpu,block io for query 2;
相关推荐
2401_8914092638 分钟前
量化数据13:港股分钟K线、Level2逐笔Tick、十档盘口和港股通历史数据的批量提取
数据库
w-w0w-w7 小时前
SQL注入
网络·数据库·sql
tianyuanwo7 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼7 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL7 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶9 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河9 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士6669 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊9 小时前
MySQL 的四种隔离级别
java·数据库·mysql
say_fall10 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++