Mysql效率优化定位较低sql的两种方式

 更新时间:2015年10月29日 14:18:30   投稿:mrr  
通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL

关于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压缩包版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql压缩包版安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 一次非法关机导致mysql数据表损坏的实例解决

    一次非法关机导致mysql数据表损坏的实例解决

    本文介绍由于非法硬件关机,造成了mysql的数据表损坏,数据库不能正常运行的一个实例,接下来是作者排查错误的过程,希望对大家能有所帮助
    2013-01-01
  • MySQL不用like+%实现模糊查询

    MySQL不用like+%实现模糊查询

    本文主要介绍了MySQL不用like+%实现模糊查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 一文了解MySQL二级索引的查询过程

    一文了解MySQL二级索引的查询过程

    索引是一种用于快速查询行的数据结构,就像一本书的目录就是一个索引,下面这篇文章主要给大家介绍了关于MySQL二级索引查询过程的相关资料,需要的朋友可以参考下
    2022-02-02
  • MySQL不使用order by实现排名的三种思路总结

    MySQL不使用order by实现排名的三种思路总结

    ORDER BY语句用于根据指定的列对结果集进行排序,在日常开发中也经常会用到,但下面这篇文章主要给大家介绍了关于MySQL不使用order by实现排名的三种思路,需要的朋友可以参考下
    2021-06-06
  • Mysql实战练习之简单图书管理系统

    Mysql实战练习之简单图书管理系统

    由于课设需要做这个,于是就抽了点闲余时间,写了下,用Mysql与Java,基本全部都涉及到,包括借书/还书,以及书籍信息的更新,查看所有的书籍。需要的朋友可以参考下
    2021-09-09
  • mysql 表空间及索引的查看方法

    mysql 表空间及索引的查看方法

    mysql 表空间及索引的查看方法,需要的朋友可以参考下。
    2011-07-07
  • mysql自联去重的一些笔记记录

    mysql自联去重的一些笔记记录

    这篇文章主要给大家介绍了关于mysql自联去重的一些笔记记录,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • CentOS 5.5下安装MySQL 5.5全过程分享

    CentOS 5.5下安装MySQL 5.5全过程分享

    网络上有很多相关的安装笔记,但是并不详尽,或是编译环境稍有不同,过程就会有差异,所以我总结了已有的经验和我自己安装过程中的体验,扩充并详尽地记录了整个过程。我选择安装的是MySQL5.5.27版本。以下是我的安装笔记
    2012-09-09
  • MySQL 存储过程的基本用法介绍

    MySQL 存储过程的基本用法介绍

    我们大家都知道MySQL 存储过程是从 MySQL 5.0 开始逐渐增加新的功能。存储过程在实际应用中也是优点大于缺点。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程。
    2010-12-12

最新评论