• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SHOW PROFILE语句

    SHOW PROFILE [type [, type] ... ]
        [FOR QUERY n]
        [LIMIT row_count [OFFSET offset]]
    
    type: {
        ALL
      | BLOCK IO
      | CONTEXT SWITCHES
      | CPU
      | IPC
      | MEMORY
      | PAGE FAULTS
      | SOURCE
      | SWAPS
    }
    

    SHOW PROFILESHOW PROFILES报表显示剖析,表示当前会话过程中执行的语句资源使用信息。

    注意

    SHOW PROFILESHOW PROFILES语句被取消,并将在未来的MySQL版本中删除。改用性能模式;请参见“使用性能模式进行查询分析”。

    要控制性能分析,请使用profiling会话变量,该变量的默认值为0(OFF)。通过设置profiling为1或启用分析ON

    mysql> SET profiling = 1;
    

    SHOW PROFILES显示发送到服务器的最新语句的列表。列表的大小由profiling_history_size会话变量控制,该变量的默认值为15。最大值为100。将值设置为0具有禁用分析的实际效果。

    除了SHOW PROFILE和以外,所有语句均已SHOW PROFILES配置文件,因此您在配置文件列表中都找不到这些语句。分析格式错误的语句。例如,SHOW PROFILING是一条非法语句,如果您尝试执行它,则会发生语法错误,但是它将显示在配置文件列表中。

    SHOW PROFILE显示有关单个语句的详细信息。如果没有该子句,则输出与最近执行的语句有关。如果包含,则显示语句的信息。的值对应于所显示的值。FOR QUERY nFOR QUERY nSHOW PROFILEnnQuery_IDSHOW PROFILES

    可以提供该子句以将输出限制为行。如果给出,则可以添加以将输出行开始到完整的行集中。LIMIT row_countrow_countLIMITOFFSET offsetoffset

    默认情况下,SHOW PROFILE显示StatusDuration列。这些Status值类似于所State显示的值SHOW PROCESSLIST,尽管对于某些状态值,这两个语句的解释可能略有不同(请参见“检查线程信息”)。

    type可以指定可选值以显示特定的其他信息类型:

    • ALL显示所有信息
    • BLOCK IO显示块输入和输出操作的计数
    • CONTEXT SWITCHES显示自愿和非自愿上下文切换的计数
    • CPU显示用户和系统的CPU使用时间
    • IPC显示已发送和已接收邮件的计数
    • MEMORY目前尚未实施
    • PAGE FAULTS显示主要和次要页面错误的计数
    • SOURCE显示源代码中的函数名称以及该函数所在文件的名称和行号
    • SWAPS显示掉期计数

    每个会话均启用分析。会话结束时,其分析信息将丢失。

    mysql> SELECT @@profiling;
    +-------------	+
    | @@profiling 	|
    +-------------	+
    |           0 	|
    +-------------	+
    1 row in set (0.00 sec)
    
    mysql> SET profiling = 1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> DROP TABLE IF EXISTS t1;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> CREATE TABLE T1 (id INT);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> SHOW PROFILES;
    +----------	+----------	+--------------------------	+
    | Query_ID 	| Duration 	| Query                    	|
    +----------	+----------	+--------------------------	+
    |        0 	| 0.000088 	| SET PROFILING = 1        	|
    |        1 	| 0.000136 	| DROP TABLE IF EXISTS t1  	|
    |        2 	| 0.011947 	| CREATE TABLE t1 (id INT) 	|
    +----------	+----------	+--------------------------	+
    3 rows in set (0.00 sec)
    
    mysql> SHOW PROFILE;
    +----------------------	+----------	+
    | Status               	| Duration 	|
    +----------------------	+----------	+
    | checking permissions 	| 0.000040 	|
    | creating table       	| 0.000056 	|
    | After create         	| 0.011363 	|
    | query end            	| 0.000375 	|
    | freeing items        	| 0.000089 	|
    | logging slow query   	| 0.000019 	|
    | cleaning up          	| 0.000005 	|
    +----------------------	+----------	+
    7 rows in set (0.00 sec)
    
    mysql> SHOW PROFILE FOR QUERY 1;
    +--------------------	+----------	+
    | Status             	| Duration 	|
    +--------------------	+----------	+
    | query end          	| 0.000107 	|
    | freeing items      	| 0.000008 	|
    | logging slow query 	| 0.000015 	|
    | cleaning up        	| 0.000006 	|
    +--------------------	+----------	+
    4 rows in set (0.00 sec)
    
    mysql> SHOW PROFILE CPU FOR QUERY 2;
    +----------------------	+----------	+----------	+------------	+
    | Status               	| Duration 	| CPU_user 	| CPU_system 	|
    +----------------------	+----------	+----------	+------------	+
    | checking permissions 	| 0.000040 	| 0.000038 	|   0.000002 	|
    | creating table       	| 0.000056 	| 0.000028 	|   0.000028 	|
    | After create         	| 0.011363 	| 0.000217 	|   0.001571 	|
    | query end            	| 0.000375 	| 0.000013 	|   0.000028 	|
    | freeing items        	| 0.000089 	| 0.000010 	|   0.000014 	|
    | logging slow query   	| 0.000019 	| 0.000009 	|   0.000010 	|
    | cleaning up          	| 0.000005 	| 0.000003 	|   0.000002 	|
    +----------------------	+----------	+----------	+------------	+
    7 rows in set (0.00 sec)
    
    注意

    在某些体系结构上,性能分析仅部分起作用。对于取决于getrusage()系统调用的值,在NULL不支持该调用的系统(例如Windows)上返回。此外,性能分析是按进程而不是每个线程进行的。这意味着服务器中除您自己以外的线程上的活动可能会影响您看到的计时信息。

    INFORMATION_SCHEMAPROFILING表格中也提供了分析信息。请参见“ INFORMATION_SCHEMA PROFILING表”。例如,以下查询是等效的:

    SHOW PROFILE FOR QUERY 2;
    
    SELECT STATE, FORMAT(DURATION, 6) AS DURATION
    FROM INFORMATION_SCHEMA.PROFILING
    WHERE QUERY_ID = 2 ORDER BY SEQ;