当前位置:   article > 正文

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

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: 系统启动后到现在总共等待次数
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/960562
推荐阅读
相关标签
  

闽ICP备14008679号