Mysql效率优化定位较低sql的两种方式


Posted in MySQL onMay 26, 2021

关于mysql效率优化一般通过以下两种方式定位执行效率较低的sql语句。

通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL 。

慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化。

下面我们举例说明一下,如何通过慢查询日志定位执行效率底的 SQL 语句:

开启慢查询日志 , 配置样例:

log-slow-queries

在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录)指定的路径下,默认文件名是 host_name-slow.log 。

和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。

( 1 )首先查询一下 long_query_time 的值 。

mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)

( 2 )为了方便测试,将修改慢查询时间为 5 秒。

mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)

( 3 )依次执行下面两个查询语句。

第一个查询因为查询时间低于 5 秒而不会出现在慢查询日志中:

mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)

第二个查询因为查询时间大于 5 秒而应该出现在慢查询日志中:

mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 6552961 |
+----------+
1 row in set (11.07 sec)

( 4 )查看慢查询日志。

[root@localhost mysql]# more localhost-slow.log
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;

从上面日志中,可以发现查询时间超过 5 秒的 SQL ,而小于 5 秒的则没有出现在此日志中。
如果慢查询日志中记录内容很多,可以使用 mysqldumpslow 工具( MySQL 客户端安装自带)来对慢查询日志进行分类汇总。下例中对日志文件 mysql_master-slow.log 进行了分类汇总,只显示汇总后摘要结果:

[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log
Reading mysql slow query log from mysql_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master
select count(N) from t_user;

对于 SQL 文本完全一致,只是变量不同的语句, mysqldumpslow 将会自动视为同一个语句进行统计,变量值用 N 来代替。这个统计结果将大大增加用户阅读慢查询日志的效率,并迅速定位系统的 SQL 瓶颈。

注意:慢查询日志对于我们发现应用中有性能问题的 SQL 很有帮助,建议正常情况下,打开此日志并经常查看分析。

以上是给大家介绍的Mysql效率优化定位较低sql的两种方式 ,希望以上所述对大家有所帮助。

MySQL 相关文章推荐
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
将图片保存到mysql数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
Mysql开启外网访问
May 15 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
mysql sock 文件解析及作用讲解
Jul 15 MySQL
MySql按时,天,周,月进行数据统计
Aug 14 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 #MySQL
MySQL查看表和清空表的常用命令总结
May 26 #MySQL
MySQL中distinct与group by之间的性能进行比较
MySQL中distinct和count(*)的使用方法比较
May 26 #MySQL
MySQL中出现乱码问题的终极解决宝典
如何设计高效合理的MySQL查询语句
May 26 #MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 #MySQL
You might like
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
layui文件上传实现代码
2017/05/20 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
详解Python中find()方法的使用
2015/05/18 Python
详解python3实现的web端json通信协议
2016/12/29 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
旷课检讨书大全
2014/01/21 职场文书
企业节能减排实施方案
2014/03/19 职场文书
学生会主席竞聘书
2014/03/31 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2014年商场工作总结
2014/11/22 职场文书
初中家长意见
2015/06/03 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python