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 infobright的安装步骤
Apr 07 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
SQLServer常见数学函数梳理总结
Aug 05 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
上海无线电三厂简史修改版
2021/03/01 无线电
php中文字符截取防乱码
2008/03/28 PHP
javascript中的对象创建 实例附注释
2011/02/08 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
vue登录注册实例详解
2019/09/14 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python使用folium库绘制地图点击框
2018/09/21 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
举例讲解Python常用模块
2019/03/08 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
主持人演讲稿范文
2013/12/28 职场文书
岗位职责说明书
2014/05/07 职场文书
入党函调证明材料
2014/12/24 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
时尚女魔头观后感
2015/06/04 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS
Redis特殊数据类型bitmap位图
2022/06/01 Redis