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的MVCC多版本并发控制的实现
Apr 14 MySQL
详解MySQL 用户权限管理
Apr 20 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
Nov 17 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
MySQL优化及索引解析
Mar 17 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 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语法(1)
2006/10/09 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
实践Vim配置python开发环境
2018/07/02 Python
对Python3 序列解包详解
2019/02/16 Python
Django logging配置及使用详解
2019/07/23 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
留学生如何写好自荐信
2013/12/27 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
廉洁自律个人总结
2015/02/14 职场文书
个人年终总结怎么写
2015/03/09 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
使用Python获取字典键对应值的方法
2022/04/26 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js