mysql慢查询优化步骤slow_query
来源:互联网 发布:选择公理 知乎 编辑:程序博客网 时间:2024/06/05 01:01
慢查询分析步骤:
1,登录mysql,查看慢查询参数状态:
show variables where Variable_name in ("slow_query_log","slow_query_log_file","log_slow_slave_statements","log_slow_admin_statements","long_query_time","log_queries_not_using_indexes","log_throttle_queries_not_using_indexes","log_output");
1,查找mysql慢查询日志的实际位置,观察大小。
ll -lh /disk3/data/server/mysql5.7.15/data/mysql-slow.log #通过第一步获得
如果太大(超过100M),进行文件拆分:
split -b 20m mysql-slow.log tmp_slow.log #原文件不会删除
2,
确定慢查询总数量:show global status like '%Slow_queries%';
#查询5条执行总时间最慢的语句。
mysqldumpslow -s t -t 5 mysql-slow.log #Time=53.54s (8352s) 中的8352s,指总时间。
得到返回总记录集最多的5个SQL。
mysqldumpslow -s r -t 5 mysql_slow.log
#查询5条总锁定时间最长的语句。
mysqldumpslow -s l -t 5 mysql-slow.log
#查询5条访问计数最多的语句。
mysqldumpslow -s c -t 5 mysql-slow.log
其他参数:
al:平均锁定时间
mysqldumpslow -s al -t 5 mysql-slow.log
ar:平均返回记录数
mysqldumpslow -s ar -t 5 mysql-slow.log
at:平均查询时间
mysqldumpslow -s at -t 5 mysql-slow.log #Time=53.54s (8352s) 中的53.54s,指平均时间。
-r 倒着排序,需要配合-s使用,不能独立使用。
-a 不要将数字和字符串抽象成N和S,会从新进行分类,对sql分类更加严格。
-g 仅仅分析相匹配的query,如:mysqldumpslow -t 10 -s t -g "left join" host-slow.log
3,分析得到的sql语句。
3.1:去除无效的sql语句。如备份数据库的shell执行的语句。
3.2:确定有效语句。慢日志中查询并复试。
SELECT COUNT(N) FROM visit_trace WHERE
UNIX_timestamp(created) >= UNIX_timestamp('S')
AND UNIX_timestamp(created) < UNIX_timestamp('S')
AND(domain = 'S'
OR domain = 'S'
OR domain = 'S')
通过vim或cat命令进行查找:cat slow.sql | grep -C 15 'AND UNIX_timestamp(created)' ;
需要优化查询:
SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT * FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
explain解析:
explain SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT * FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
优化1,缩减查询列:
SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT created,session_id FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
优化2,增加联合索引(created,session_id):
实际测试后发现优化效果不明显,暂时未添加。
1,登录mysql,查看慢查询参数状态:
show variables where Variable_name in ("slow_query_log","slow_query_log_file","log_slow_slave_statements","log_slow_admin_statements","long_query_time","log_queries_not_using_indexes","log_throttle_queries_not_using_indexes","log_output");
1,查找mysql慢查询日志的实际位置,观察大小。
ll -lh /disk3/data/server/mysql5.7.15/data/mysql-slow.log #通过第一步获得
如果太大(超过100M),进行文件拆分:
split -b 20m mysql-slow.log tmp_slow.log #原文件不会删除
2,
确定慢查询总数量:show global status like '%Slow_queries%';
#查询5条执行总时间最慢的语句。
mysqldumpslow -s t -t 5 mysql-slow.log #Time=53.54s (8352s) 中的8352s,指总时间。
得到返回总记录集最多的5个SQL。
mysqldumpslow -s r -t 5 mysql_slow.log
#查询5条总锁定时间最长的语句。
mysqldumpslow -s l -t 5 mysql-slow.log
#查询5条访问计数最多的语句。
mysqldumpslow -s c -t 5 mysql-slow.log
其他参数:
al:平均锁定时间
mysqldumpslow -s al -t 5 mysql-slow.log
ar:平均返回记录数
mysqldumpslow -s ar -t 5 mysql-slow.log
at:平均查询时间
mysqldumpslow -s at -t 5 mysql-slow.log #Time=53.54s (8352s) 中的53.54s,指平均时间。
-r 倒着排序,需要配合-s使用,不能独立使用。
-a 不要将数字和字符串抽象成N和S,会从新进行分类,对sql分类更加严格。
-g 仅仅分析相匹配的query,如:mysqldumpslow -t 10 -s t -g "left join" host-slow.log
3,分析得到的sql语句。
3.1:去除无效的sql语句。如备份数据库的shell执行的语句。
3.2:确定有效语句。慢日志中查询并复试。
SELECT COUNT(N) FROM visit_trace WHERE
UNIX_timestamp(created) >= UNIX_timestamp('S')
AND UNIX_timestamp(created) < UNIX_timestamp('S')
AND(domain = 'S'
OR domain = 'S'
OR domain = 'S')
通过vim或cat命令进行查找:cat slow.sql | grep -C 15 'AND UNIX_timestamp(created)' ;
需要优化查询:
SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT * FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
explain解析:
explain SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT * FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
优化1,缩减查询列:
SELECT
DATE_FORMAT(created,'%Y-%m-%d') date_form,
COUNT(session_id) sum_s FROM(
SELECT created,session_id FROM visit_trace
where created >= '2016-11-01 19:39:20'
AND created <= '2016-12-01 19:39:20'
GROUP BY session_id ) a
GROUP BY date_form;
优化2,增加联合索引(created,session_id):
实际测试后发现优化效果不明显,暂时未添加。
0 0
- mysql慢查询优化步骤slow_query
- Mysql慢查询优化
- MySQL慢查询优化
- MySQL慢查询优化
- mysql 慢查询 优化
- mysql 优化--定位慢查询
- mysql 优化--定位慢查询
- mysql 优化--定位慢查询
- mysql优化之慢查询
- MySQL优化之慢查询优化基础
- MySQL慢查询优化之Limit优化
- mysql中的查询优化步骤
- mysql in 子查询 效率慢 优化
- mysql in 子查询 效率慢 优化
- MySQL索引原理及慢查询优化
- MySQL索引原理及慢查询优化
- MySQL索引原理及慢查询优化
- MySQL索引原理及慢查询优化
- Retrofit的使用
- phpstorm如何删除项目
- 回溯法(一)——n皇后问题
- Hadoop集群伪分布式搭建
- linux内存管理浅析
- mysql慢查询优化步骤slow_query
- Android Zxing实现生成二维码功能
- Divide by Six
- Linux 下 ~ 与 / 的含义
- 随机生成几位数字字母组合
- 集合相等
- 如何防止SQL注入
- POJ2398 Toy Storage 判断点和线的关系+二分+计数
- (8)适配器模式