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 07 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 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
虫族 ZERG 概述
2020/03/14 星际争霸
php全角字符转换为半角函数
2014/02/07 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
php处理复杂xml数据示例
2016/07/11 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
python字符串排序方法
2014/08/29 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
详解Python文本操作相关模块
2017/06/22 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
一文搞懂Java中的注解和反射
2022/06/21 Java/Android