Mysql优化问题首先需要先开启慢查询监控的功能。
1.使用语句show variables like 'slow_query%' 查询慢查询监控是否开启。
得到的结果为:
slow_query_log OFF
slow_query_log_file E:\software\mysql-8.0.18-winx64\data\DESKTOP-79UV3JR-slow.log
2.使用show variables like 'long_query_time'查询监控慢查询时间长度.
得到的结果:
long_query_time 10.000000
3.开启慢查询
set global slow_query_log='ON'
4.执行有慢查询语句后,打开慢查询日志,里边有其中一条记录
# User@Host: root[root] @ localhost [127.0.0.1] Id: 11
# Query_time: 19.395067 Lock_time: 0.114423 Rows_sent: 1976762 Rows_examined: 5930286
use training;
SET timestamp=1586607646;
SELECT
a.date_str,
a.shopCode,
a.add_car_pv,
(
SELECT
b.shop_type
FROM
dp_shop b
WHERE
a.shopCode = b.shop_code
) shop_type
FROM
dp_car_copy a
ORDER BY
a.shopCode,
a.add_car_pv,
a.date_str;
以上信息他们分别是:
第一行:用户id;用户的ip信息;线程号;
第二行:查询耗时的时间,单位以毫秒单位;获得锁的时间;返回结果的行数;扫描的行数;
第三行:执行具体时间。
第四行:具体的sql语句。
虽然慢查询日志记录在文本里边,我们可直接打开查看,但是真正在产线中,慢查询日志太大,可能会有几个g,我们不能直接用记事本打开。所以有我们需要工具打开,结合mysqldumpslow.pl和perl两个辅助工具打开。
语法:
perl mysqldumpslow.pl -s r -t 10 E:\software\mysql-8.0.18-winx64\data\DESKTOP-79UV3JR-slow.log
说明:
可以根据自己需要进行排序,它支持一下几种排序:
-s order(c,t,l,r,at,al,ar)
c:总次数;t:总的时间;l:锁的时间;r:总的行数;at,al,ar:t,l,r平均数【例如:at = 总时间/总次数】
-t top 指定取出前面x个作为结果输出
得到的结果如下:
Count: 1 Time=22.09s (22s) Lock=0.00s (0s) Rows=1976762.0 (1976762), root[root]@localhost
SELECT
a.date_str,
a.shopCode,
a.add_car_pv,
(
SELECT
b.shop_type
FROM
dp_shop b
WHERE
a.shopCode = b.shop_code
) shop_type
FROM
dp_car_copy a
ORDER BY
a.shopCode,
a.add_car_pv,
a.date_str
Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts
E:\software\mysql-N.N.N-winx64\bin\mysqld.exe, Version: N.N.N (MySQL Community Server - GPL). started with:
TCP Port: N, Named Pipe: MySQL
# Time: N-N-11T12:N:N.500081Z
# User@Host: root[root] @ localhost [N.N.N.N] Id: N
# Query_time: N.N Lock_time: N.N Rows_sent: N Rows_examined: N
use training;
SET timestamp=N;
SELECT
a.date_str,
a.shopCode,
a.add_car_pv,
(
SELECT
b.shop_type
FROM
dp_shop b
WHERE
a.shopCode = b.shop_code
) shop_type
FROM
dp_car_copy a
ORDER BY
a.shopCode,
a.add_car_pv,
a.date_str
Died at mysqldumpslow.pl line 162, <> chunk 2.