MySQL语句执行分析

作者: 张依一 | 来源:发表于2018-11-25 17:49 被阅读16次

今天客户那边遇到一个问题:多选文件进行操作,数据量一大后台处理就特别慢,浏览器显示504超时。为了验证问题是否出在sql语句,所以用以下方法来分析:

  • 查询SQL执行记录
  • explain 分析
  • MySQL 语句执行时间

下面会分别介绍三个方法的开启方法。

查询SQL执行记录

查询日志功能是否开启

show variables LIKE 'general%';
image

general_log:日志记录功能是否开启,默认为OFF
general_log_file:日志存放路径

开启日志功能

set GLOBAL general_log = 'ON'; 

然后再次查询是否开启成功

在指定路径查看SQL记录

explain 分析

大部分的性能分析都需要使用到该命令,可以用来查看SQL语句的执行效果,可以帮助选择更好地索引和优化语句。

语法

explain + SQL语句

输出:


image

参数解析

MySQL 语句执行时间

show profile 以及show profiles语句可以显示当前会话过程中执行SQL语句的性能信息。

查看profile是否开启

show variables like '%profil%';
image
profiling:OFF 默认此功能关闭

设置开启状态

set profiling = 1;

再次查看是否开启

image
已经是开启状态

执行sql语句后进行分析

执行完后,输入

show profiles;

即可查看所有的sql的执行时间

image
show profile for query 1 

查看第1个sql语句的执行的各个操作的耗时详情。

image
show profile cpu, block io, memory,swaps,context switches,source for query 6;

可以查看出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等

show profile all for query 6 查看第6条语句的所有的执行信息。

测试完毕后,关闭参数:

mysql> set profiling=0

慢查询

开启慢查询,可以设置一个时间阈值,当sSQL执行时间超过阈值,则会被记录。通过这样可以定位到需要优化的SQL

查看慢查询命令

mysql> show variables like 'slow_query%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | OFF                                  |
| slow_query_log_file | /var/lib/mysql/50aacb0262cd-slow.log |
+---------------------+--------------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

参数说明:

slow_query_log :是否开启慢查询
slow_query_log_file :慢查询日志存放位置
long_query_time:设置阈值,超过该值才会做记录

设置步骤

开启慢查询

set global slow_query_log='ON';

设置存放日志位置

set global slow_query_log_file='/var/lib/mysql/slow.log ';

设置超时时间

set global long_query_time=1;

日志效果

  • 首先我执行一句SQL
    mysql> select sleep(3);
    +----------+
    | sleep(3) |
    +----------+
    |        0 |
    +----------+
    1 row in set (3.00 sec)
    
  • 查看日志记录


    image

    可以查看到涉及到超过1S的SQL详情

相关文章

  • 数据库基础1:语句执行步骤

    一条SQL语句执行步骤 来源于MySQL实战 查询语句执行分析 MySQL分为Server层和存储引擎层 连接器:...

  • MySQL语句执行分析

    今天客户那边遇到一个问题:多选文件进行操作,数据量一大后台处理就特别慢,浏览器显示504超时。为了验证问题是否出在...

  • MySQL 执行语句分析

    查询语句 sql 语句分为两种,一种是查询,一种是更新(增加,更新,删除)。先分析下查询语句,语句如下: 结合上面...

  • PHP面试之MySQL查询优化

    [TOC] 请简述项目中优化MySQL语句执行效率的方法,从哪些方面入手,SQL语句性能如何分析? 分析查询速度 ...

  • 7 Explain详解

    使用Explain关键字可以模拟优化器执行SQL查询语句,从而指导MySQL是如何处理SQL语句的.分析查询语句或...

  • 关于mysql的binlog

    一、一条查询语句是如何执行的? 连接器判断有无mysql服务端执行权限, 分析器会分析这条查询语句有无语法错误和告...

  • MYSQL-查询优化

    请简述项目中优化MySQL语句执行效率的方法,从哪些方面入手,SQL语句性能如何分析? 1.分析查询速度 记录慢查...

  • MySql的语句分析和性能瓶颈分析:explain ,profi

    mysql的执行计划内容,使用explain来做分析 上面分别是select和update的explain语句分析...

  • 小工具-mysql binlog分析

    目的:分析哪些语句在批量执行,主要分析mysql性能和同步延迟问题使用 get_binlog_sql_info.sh

  • MySQL执行计划

    概念:MySQL中的执行计划指通过explain语法分析SQL语句语法:explain SQL语句\G说明:通过e...

网友评论

    本文标题:MySQL语句执行分析

    本文链接:https://www.haomeiwen.com/subject/arapqqtx.html