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中出现乱码问题的终极解决宝典
May 26 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
mysql函数全面总结
Nov 11 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
mysql如何查询连续记录
May 11 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
MySQL中LAG()函数和LEAD()函数的使用
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 一个页面执行时间类代码
2010/03/05 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
python 的列表遍历删除实现代码
2020/04/12 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
简单了解如何封装自己的Python包
2020/07/08 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
python中spy++的使用超详细教程
2021/01/29 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
2014年教师政治学习材料
2014/06/02 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript