Mysql-使用show profiles分析你的SQL

是什么

  • 慢查询:执行超过指定时间的SQL语句;分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”
  • 慢查询日志:MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中
  • long_query_time参数的默认值为10s,我们可以调整这个参数,超过这个参数值的SQL将被定义为慢查询语句

如何用

  • 默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数

  • 如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响

    慢查询日志支持将日志记录写入文件

使用

SHOW VARIABLES LIKE'%slow_query_log%';

查看慢查询日志是否开启,默认关闭

使用

set global slow_query_log=1;

开启慢查询日志

使用

SHOW VARIABLES LIKE'long_query_time%';

查看慢查询默认阈值

默认10秒

使用

set long_query_time=1 ;

调整阈值为1秒

设置以后,我们可以使用

mysqldumpslow命令进行日志分析

工具-SHOW PROCESSLIST

查询mysql进程列表,可以杀掉故障进程

工具-SHOW PRIFILES

  • 是什么

    是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量

  • 默认情况下,参数处于关闭状态,并保存最近15次的运行结果

set profiling = on ; 

在show profiles下:

  • 会显示你在开启profiling之后的SQL语句,并给出它们的查询id
  • Duration会显示SQL的执行时间

有了查询ID之后,我们可以

  • 查询CPU、内存、IO的执行状况,使用
show profile cpu,block io for query 1 ; 

Status记录了一条SQL的完整生命周期,后面带着内存、CPO的使用和IO情况,足以帮助我们分析一条SQL的性能,并做出优化了

请注意,如果出现以下Status,证明这条SQL性能会被大幅影响

  • converting HEAP to MyISAM :查询结果太过大,内存都不够用了往磁盘上搬了
  • Creating tmp table: 创建临时表,极有可能出现FIleSORT
  • Copying to tmp table on disk 把内存中临时表复制到磁盘,这是一个非常危险的信号,因为这个操作十分消耗CPU资源
  • lockd 发生死锁

以上四个状态,出现任何一个,都必须得优化!!

发布了182 篇原创文章 · 获赞 121 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/105664499
今日推荐