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对于模糊查询like的一些汇总
May 09 MySQL
详解mysql三值逻辑与NULL
May 19 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
优化Mysql查询的示例
Apr 26 MySQL
关于mysql中string和number的转换问题
Jun 14 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 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扩展图文教程
2008/12/12 PHP
php 安全过滤函数代码
2011/05/07 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
js获取客户端外网ip的简单实例
2013/11/21 Javascript
cookie的secure属性详解
2015/04/08 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
python实现控制COM口的示例
2019/07/03 Python
python selenium操作cookie的实现
2020/03/18 Python
django项目中新增app的2种实现方法
2020/04/01 Python
UDP协议功能
2013/01/06 面试题
房地产开发计划书
2014/01/10 职场文书
上课说话检讨书大全
2014/01/22 职场文书
企业年检委托书范本
2014/10/14 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
个人党性分析材料
2014/12/19 职场文书
python - asyncio异步编程
2021/04/06 Python
Python Django ORM连表正反操作技巧
2021/06/13 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js