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删除和插入数据很慢的问题解决
Jun 03 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
MySQL 数据类型详情
Nov 11 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 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和javascript常用正则表达式及用法实例
2014/07/01 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python爬虫之自制英汉字典
2019/06/24 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
初中生自我评价
2014/02/01 职场文书
班主任个人工作反思
2014/04/28 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
高考标语大全
2014/06/05 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python