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索引篇之千万级数据实战测试
Apr 05 MySQL
MySQL InnoDB ReplicaSet(副本集)简单介绍
Apr 24 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
mysql的数据压缩性能对比详情
Nov 07 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
解析MySQL索引的作用
Mar 03 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
MySQL 数据库 增删查改、克隆、外键 等操作
May 11 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中获取文件扩展名的N种方法小结
2012/02/27 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
微信小程序实现评论功能
2018/11/28 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
python中二维阵列的变换实例
2014/10/09 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python实现多线程网页下载器
2018/04/15 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python学生管理系统的实现
2020/04/05 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
教师业务学习制度
2014/01/25 职场文书
生产文员岗位职责
2014/04/05 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2014年财政工作总结
2014/12/10 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
SQL Server删除表中的重复数据
2022/05/25 SQL Server