MySQL高级第五篇(查询截取分析)

三、Show Profile

  1. show profile 是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于sql调优的测量。
  2. 默认情况下,参数处于关闭状态,并保存最近15次的运行结果。
    3.分析步骤:
    • 看看当前的MySQL版本是否支持,以及是否开启。
      命令show variables like 'profiling'进行查看是否开启,默认关闭,命令set profiling = on将其开启

    • 用show profile 查看结果
      SHOW PROFILES;可以查看运行过的sql,如下图

      MySQL高级第五篇(查询截取分析)_第1张图片
      执行结果图

    • 诊断sql
      show profile 后面可以有很多参数,来查看执行的详细情况,其中我们主要用的是cpu,block io。详细参数介绍:

      • all :显示所有的开销信息
      • block io : 显示io相关开销
      • context switches : 上下文切换相关开销
      • cpu : 显示cpu相关开销
      • ipc : 显示发送和接收相关开销信息
      • memory : 显示内存相关开销信息
      • page faults : 显示页面错误相关开销信息
      • source :显示source_function,source_file,source_line相关的开销信息
      • swaps : 显示交换次数相关的开销信息
        例如使用命令show profile cpu,block io for query 10查看Query_ID为10的sql,cpu,block io的开销以及执行生命周期,如下图:
        MySQL高级第五篇(查询截取分析)_第2张图片
        sql生命周期
    • 根据诊断情况需要注意哪些

      • status 出现 converting HEAP to MyISAM 查询结果太大内存不够用,结果放到了磁盘上
      • status 出现creating tmp table 创建临时表,拷贝数据到临时表,用完再删除。
      • status 出现 copying to tmp table 把内存中临时表复制到磁盘,非常危险!
      • status 出现 locked

四、全局查询日志

  1. 开启全局查询日志以后,所有的sql都会被记录下来(生产环境不要开启这个)
  2. 可以在my.cnf中配置开启,设置general_log = 1,general_log_file=/路径,log_output=FILE,或者log_output=TABLE,设置了输出到文件中,那么所有的sql都被记录到了general_log_file中配置的路径里面,如果设置了输出到table,那么所有的记录都被记录到了mysql库中的general_log表中。
  3. 可以使用命令开启,命令开启的mysql重启以后将失效; 执行命令set global general_log = 1;set global log_output='TABLE';之后所有的sql都将被记录到general_log中。使用select * from mysql.general_log 将查处所有的sql。

你可能感兴趣的:(MySQL高级第五篇(查询截取分析))