MySQL高级--Show Profile和全局查询日志

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

  2. 官网: http://dev.mysql.com/doc/refman/5. 5/en/show-profile.html

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

  4. 分析步骤:

    1. 是否支持,看看当前的mysq|版本是否支持

      • Show variables like 'profiling'
      • 默认是关闭,使用前需要开启

    2. 开启功能,默认是关闭,使用前需要开启

      • show variables like 'profiling' ;

      • set profiling=on;

    3. 运行SQL :

      • select * from emp group by id%10 limit 150000;

      • select * from emp group by id%20 order by 5;

    4. 查看结果,show profiles;

    5. 诊断SQL,show profile cpu,block io for query 上一步前面的问题SQL数字号码;

      • 参数备注:

        • type:

        • ALL:显示所有 的开销信息

        •  BLOCK IO :-显示块IO相关开销

        •  CONTEXT SWITCHES-.上下文切换相关开销

        • CPU:-显示CPU相关开销信息

        • IPC:--显示发送和接收相关开销信息

        • MEMORY:--显示内存相关开销信息

        • PAGE FAULTS:-显示页面错误相关开销信息

        • SOURCE:-显示和Source_ _function, Source_ file, Source_ line相关的开销信息

        • SWAPS:-显示交换次数相关开销的信息

    6. 日常开发需要注意的结论

      • converting HEAP to MyISAM查询结果太大,内存都不够用了往磁盘上搬了。

      • Creating tmp table创建临时表:

        1. 拷贝数据到临时表

        2. 用完再删除

      • Copying to tmp table on disk把内存中临时表复制到磁盘,危险! ! !

      • locked

  5. 全局查询日志:

     

    1. 配置启用

      • 在mysql的my.cnf中,设置如下:

      • #开启
        general_ log=1

      • #记录日志文件的路径
        general_ log_ file=/path/logfile

      • #输出格式
        log_ output=FILE

    2. 编码启用

      • 命令

      • set global general_ log=1;

      • set global log_output='TABLE';

      • 此后,你所编写的sq|语句,将会记录到mysq|库里的general log表,可以用下面的命令查看

      • select * from mysql.general_log;

      •  
    3. 永远不要在生产环境开启这个功能。

posted @ 2021-05-18 22:01  张紫韩  阅读(116)  评论(0编辑  收藏  举报