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 PROFILE
和SHOW PROFILES
报表显示剖析,表示当前会话过程中执行的语句资源使用信息。
注意该
SHOW PROFILE
和SHOW 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 n
FOR QUERY n
SHOW PROFILE
n
n
Query_ID
SHOW PROFILES
可以提供该子句以将输出限制为行。如果给出,则可以添加以将输出行开始到完整的行集中。LIMIT row_count
row_count
LIMIT
OFFSET offset
offset
默认情况下,SHOW PROFILE
显示Status
和Duration
列。这些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_SCHEMA
PROFILING
表格中也提供了分析信息。请参见“ INFORMATION_SCHEMA PROFILING表”。例如,以下查询是等效的:
SHOW PROFILE FOR QUERY 2;SELECT STATE, FORMAT(DURATION, 6)AS DURATIONFROM INFORMATION_SCHEMA.PROFILINGWHERE QUERY_ID = 2ORDER BY SEQ;