利用mysql自带的profile和status查看语句的执行情况

mysql用profile查看语句的执行情况

有一些耗时非常长的语句,可以通过如下语句检测出来,哪里出了问题。

1.首先确保profile功能开启

show variables like 'profiling'
如果是on才是开启的
没开启执行set profiling=on

2.执行sql查询语句

因为profile是检测你的查询语句性能分别耗时多少,所以得执行一下select吧。

3.show profiles

show profiles用来查看之前执行过的语句

4.显示语句具体信息

show profile cpu,block io for query 3
show profiles的查询结果会得到查询的id,show profile就可以看到具体数据库的执行情况,哪一步消耗了多长时间。
下面是我的某个查询语句的情况:
图片mysql-profile结果

show profile的参数共有下面这几种:

  • all,显示所有信息
  • block io,显示io块开销
  • context switches,上下文切换相关开销
  • cpu,显示cpu相关开销
  • ipc,显示发送和接收相关开销
  • memory,显示内存相关开销
  • page faults,显示页面错误相关开销
  • source,显示和source_function, source_file, source_line相关的开销信息
  • swaps,显示交换次数的开销

主要是cpu和io。
在CPU和IO显示的条目里面有四个是不能出现的,他们非常耗时。

  • converting HEAP to MyISAM:内存不够用,数据粗在磁盘上了
  • creating tmp table:拷贝数据到临时表,用完还要删除
  • copying to tmp table on disk:把内存中的临时表复制到硬盘
  • locked

如果在测试环境中可以这么干

记录所有表的日志
set global general_log=1
set global log_output='TABLE'
上面这两句会把sql的执行情况存储到 mysql 库里面的 general_log 表。
然后select * from mysql.general_log
注意,只能在测试时候用

用status查看行锁的竞争情况

show status like 'innodb_row_lock%'

出现的字段说明如下:

  • Innodb_row_lock_current_waits: 当前正在等待锁定的数量
  • Innodb_row_lock_time: 从系统启动到现在锁定时间总长度
  • Innodb_row_lock_time_avg: 每次等待花费的平均时间
  • Innodb_row_lock_time_max: 从系统启动到现在等待最长的一次花费的时间
  • Innodb_row_lock_waits: 系统启动后到现在总共等待次数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下两种方式查看MySQL的SQL执行效率: 1. 使用`EXPLAIN`语句查看SQL查询计划 `EXPLAIN`是MySQL的一个关键字,可以用来查看查询语句执行计划,从而了解MySQL是如何处理查询语句的。具体操作步骤如下: 1) 执行`EXPLAIN SELECT * FROM table_name WHERE condition;`查询语句,其中`table_name`为表名,`condition`为查询条件。 2) 查看查询结果,MySQL会返回一张表格,包含了查询语句执行计划。 查询结果中的每一行对应着MySQL执行计划中的一个步骤,每一列则是该步骤的具体信息,比如: - `id`:标识该步骤在执行计划中的唯一ID。 - `select_type`:表示该步骤的查询类型,比如SIMPLE、PRIMARY等。 - `table`:表示该步骤所涉及的表名。 - `type`:表示该步骤的访问类型,比如ALL、INDEX等。 - `possible_keys`:表示该步骤可能使用的索引。 - `key`:表示该步骤实际使用的索引。 - `key_len`:表示该步骤使用的索引长度。 - `ref`:表示该步骤使用的索引所依赖的列。 - `rows`:表示该步骤扫描的行数。 - `Extra`:表示该步骤的附加信息。 通过查看这些信息,可以了解SQL查询语句MySQL中的执行计划,进而优化SQL查询语句的性能。 2. 使用`SHOW PROFILE`语句查看SQL执行时间 `SHOW PROFILE`是MySQL的一个关键字,可以用来查看SQL查询语句MySQL中的执行时间,包括SQL执行过程中各个阶段的耗时。具体操作步骤如下: 1) 执行`SET profiling=1;`命令,开启MySQL的查询分析功能。 2) 执行需要分析的SQL查询语句。 3) 执行`SHOW PROFILES;`命令,查看SQL查询语句执行情况。 查询结果中的每一行对应着SQL查询语句的一个阶段,每一列则是该阶段的具体信息,比如: - `Query_ID`:标识该阶段在查询过程中的唯一ID。 - `Duration`:表示该阶段的执行时间(单位为秒)。 - `Query`:表示该阶段所对应的SQL查询语句。 - `Status`:表示该阶段的状态,比如starting、executing、sending data等。 通过查看这些信息,可以了解SQL查询语句MySQL中的执行时间,进而优化SQL查询语句的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值