Spec-Zone .ru
спецификации, руководства, описания, API
|
SHOW PROFILE [type
[,type
] ... ] [FOR QUERYn
] [LIMITrow_count
[OFFSEToffset
]]type
: ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS
The SHOW PROFILE
and SHOW PROFILES
statements display profiling information that indicates resource
usage for statements executed during the course of the current session.
These statements are deprecated as of MySQL 5.6.7 and will be removed in a future MySQL release. Use the Performance Schema instead; see Chapter 21, MySQL Performance Schema.
Profiling is controlled by the profiling
session variable, which has a default value of 0 (OFF
). Profiling is enabled by setting profiling
to 1 or ON
:
mysql> SET profiling = 1;
SHOW PROFILES
displays a list of the most recent statements sent to the server.
The size of the list is controlled by the profiling_history_size
session variable, which has a default value of 15. The
maximum value is 100. Setting the value to 0 has the practical effect of disabling profiling.
All statements are profiled except SHOW
PROFILE
and SHOW PROFILES
,
so you will find neither of those statements in the profile list. Malformed statements are profiled. For
example, SHOW PROFILING
is an illegal statement, and a syntax error occurs if you
try to execute it, but it will show up in the profiling list.
SHOW
PROFILE
displays detailed information about a single statement. Without the FOR
QUERY
clause, the output pertains to the most recently
executed statement. If n
FOR QUERY
is
included, n
SHOW PROFILE
displays information for statement n
. The values of n
correspond to the Query_ID
values displayed by SHOW PROFILES
.
The LIMIT
clause may be given
to limit the output to row_count
row_count
rows. If LIMIT
is given, OFFSET
may be added to begin the output offset
offset
rows into the full set of rows.
By default, SHOW PROFILE
displays Status
and Duration
columns. The Status
values are like the State
values displayed by SHOW PROCESSLIST
, although there might be some minor differences in interpretion
for the two statements for some status values (see Section
8.12.5, "Examining Thread Information").
Optional type
values may be specified to display specific additional
types of information:
ALL
displays all information
BLOCK IO
displays counts for block input and output
operations
CONTEXT SWITCHES
displays counts for voluntary and
involuntary context switches
CPU
displays user and system CPU usage times
IPC
displays counts for messages sent and received
MEMORY
is not currently implemented
PAGE FAULTS
displays counts for major and minor page
faults
SOURCE
displays the names of functions from the source
code, together with the name and line number of the file in which the function occurs
SWAPS
displays swap counts
Profiling is enabled per session. When a session ends, its profiling information is lost.
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)
Profiling is only partially functional on some architectures. For values that depend on the getrusage()
system call, NULL
is returned on systems
such as Windows that do not support the call. In addition, profiling is per process and not per thread. This
means that activity on threads within the server other than your own may affect the timing information that
you see.
You can also get profiling information from the PROFILING
table in INFORMATION_SCHEMA
. See Section 20.17, "The INFORMATION_SCHEMA
PROFILING
Table". For example, the following queries produce the same result:
SHOW PROFILE FOR QUERY 2;SELECT STATE, FORMAT(DURATION, 6) AS DURATIONFROM INFORMATION_SCHEMA.PROFILINGWHERE QUERY_ID = 2 ORDER BY SEQ;