zoukankan      html  css  js  c++  java
  • show profile查看SQL执行生命周期

    MySQL中show profile

    • 正常情况下:收到爆栈,通过开启慢日志找到SQL,然后执行explain查看SQL,是可以解决大部分问题的。但是仍然找不到问题,可以通过show profile让检测的粒度更细化,比如在传输,网络连接,死锁等现象问题排查。如果再不行就需要配合DBA,进行数据库配置文件优化。

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

    • 分析步骤:

      1. 查看当前MySQL版本是否支持:默认条件关闭状态,并保存最近15次运行结果。
      show variables like 'profiling';
      

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

        set profiling=on;
        
      2. 运行sql:

        select * from emp group by id%10;
        select * from emp group by id%20 order by 5;
        ...
        
      3. 通过show profiles查看执行sql时间的结果:

        Query_ID 查询的ID
        Duration  执行时间
        Query     当前执行SQL语句
        
      4. 诊断SQL

        show profile cpu,block io for query [Query_ID]
        
        show profile cpu,block io for query 12
        

        这里只列出了cpu和 block io 当然 诊断类型不止这些:

        ALL 显示所有的开销信息
        BLOCK IO 显示块IO相关开销
        CONTEXT SWITCHES 上下文切换相关开销
        CPU  显示CPU相关开销信息
        IPC  显示发送和接收相关开销信息
        MEMORY 显示内存相关开销信息
        PAGE FAULTS 显示页面错误相关开销
        SOURCE  显示和Source_function,Source_file,Source_line相关的开销信息
        SWAPS   显示交换次数相关开销的信息
        
        • 象用什么类型只需往后加就行,常用的cpu和block io
      5. 虽然show profile让我们粒度更细的去分析整个sql生命周期,那么如何区分哪条SQL有问题呢?

        日常开发注意结论,出现以下4个就会出现很大问题:
        	converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬
        	Creating tmp table 创建临时表,拷贝数据到临时表,用完再删除
        	Copy to tmp table on disk  把内存中临时表赋值到磁盘,很危险
        	locked   存在锁
        

        查看id=19语句生命周期:它的时间很长

        show profile cpu,block io for query 19;
        

      Creating tmp table 
      Copy to tmp table
      removing tmp table
      当然会慢了
      

    全局查询日志:

    • 只允许在测试环境上使用,永远不要在生产环境开启此功能

    • 启动

      1.终端启动:
      	set global general_log=1;
      	set global log_output='TABLE';
      	# 以后,你所编写的sql语句,将会记录到mysql库里的general_log表中,可以用下面命令查看
      	select * from mysql.general_log;
      2.配置文件启动:
      	mysql的my.cnf 设置
      	general_log=1
      	general_log_file=/path/logfile # 记录日志文件的路径
      	log_output=FILE  #输出格式
      
  • 相关阅读:
    uva 532
    uva 10557
    uva 705
    uva 784
    uva 657
    uva 572
    uva 10562
    usa物价统计
    2019/6/30,道歉书
    名词收集
  • 原文地址:https://www.cnblogs.com/xujunkai/p/12496634.html
Copyright © 2011-2022 走看看