SQL慢查询

SQL慢查询

柳性安 699 2023-07-26

SQL慢查询

通过日志定位到慢查询SQL

show variables like '%slow_query_log';
// 这是个全局参数
set global slow_query_log='ON';//开启慢查询日志
// 查看执行时间多长的SQL 可以视为慢查询
show variables like '%long_query_time%';
// 设置慢查询时间->查询执行了多久时间后记录日志
set global long_query_time = 3;
// 查看日志存储路径
show variables like 'slow_query_log%';

生产环境建议开启慢查询日志,根据需要设置慢查询时间。

查看日志存储位置,可以监控这个文件。
image

慢查询日志格式

image-1690352087465
Query_time:语句执行时间(真实执行时间 + 锁定时间)

Lock_time:锁定时间

Rows_sent:发送给客户端的数据行

Rows_exaimned:扫描的行数

后面几行就是sql命令,这里用sleep做个测试

注意,慢查询SQL指的是SQL真实执行的时间,不包含锁定的时间,比如事务1修改row1,事务2因等待操作row1而锁定等待的时间就不包含

mysqldumpslow命令

作用:根据条件dump出慢查询日志

-s:采用 order 排序的方式,排序方式可以有以下几种。

分别是 c(访问次数)、t(查询时间)、l(锁定时间)、r(返回记录)、ac(平均查询次数)、

al(平均锁定时间)、ar(平均返回记录数)和 at(平均查询时间)。其中 at 为默认排序方式。

-t:返回前 N 条数据

mysqldumpslow -s t -t 1;