8.4 show profile分析SQL

目录

    Mysql从5.0.37版本开始增加了对 show profiles 和 show profile 语句的支持。show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql的调优的测量。

    通过 have_profiling 参数,能够看到当前MySQL是否支持profile:

    show variables like 'profiling';
    select @@have_profiling;

    默认profiling是关闭的,可以通过set语句在Session级别开启profiling:

    set profiling=1; # 开启profiling 开关

    通过profile,我们能够更清楚地了解SQL执行的过程。

    首先,我们可以执行一系列的操作,如下图所示:

    show databases;
    use db01;
    show tables;
    select * from tb_item where id < 5;
    select count(*) from tb_item;

    执行完上述命令之后,再执行show profiles 指令, 来查看SQL语句执行的耗时:

    show profiles;

    诊断SQL:通过show profile for query query_id 语句可以查看到该SQL执行过程中每个线程的状态和消耗的时间:

    -- 查看query_id 为6的执行SQL情况
    show profile for query 6;

    TIP :
    Sending data 状态表示MySQL线程开始访问数据行并把结果返回给客户端,而不仅仅是返回个客户端。由于在Sending data状态下,MySQL线程往往需要做大量的磁盘读取操作,所以经常是整个查询中耗时最长的状态。

    在获取到最消耗时间的线程状态后,MySQL支持进一步选择 all、cpu、block io 、context switch、page faults等明细类型类查看MySQL在使用什么资源上耗费了过高的时间。例如,选择查看CPU的耗费时间 :

    字段 含义
    Status sql 语句执行的状态
    Duration sql 执行过程中每一个步骤的耗时
    CPU_user 当前用户占有的cpu
    CPU_system 系统占有的cpu

    posted @   Lz_蚂蚱  阅读(45)  评论(0编辑  收藏  举报
    点击右上角即可分享
    微信分享提示
    评论
    收藏
    关注
    推荐
    深色
    回顶
    收起