美文网首页
MySQL高级第五篇(查询截取分析)

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

作者: AD甜蜜蜜 | 来源:发表于2017-09-03 16:22 被阅读0次

    三、Show Profile

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

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

        执行结果图
      • 诊断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的开销以及执行生命周期,如下图:
          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高级第五篇(查询截取分析)

          本文链接:https://www.haomeiwen.com/subject/wezkjxtx.html