13.7.5.31 SHOW PROFILE 구문
SHOW PROFILE [type
[,type
] ... ] [FOR QUERYn
] [LIMITrow_count
[OFFSEToffset
]]type
: ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS
SHOW PROFILE
및 SHOW PROFILES
문은 현재 세션의 과정에서 실행 된 명령문의 자원 사용량을 나타내는 프로파일 정보를 표시합니다.
이 문은 MySQL 5.6.7의 시점에서 비추천이며, 미래의 MySQL 릴리스에서 제거 될 예정입니다. 대신 성능 스키마를 사용하십시오. 제 22 장 「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
은 1 개의 문에 대한 자세한 정보를 표시합니다. FOR QUERY
절을 지정하지 않으면 출력은 최근에 실행 된 문에 관련한 것입니다. n
FOR QUERY
이 포함되어있는 경우, n
SHOW PROFILE
명령문 n
에 대한 정보를 표시합니다. n
값은 SHOW PROFILES
에 의해 표시되는 Query_ID
값에 해당합니다.
LIMIT
절을 지정하면 출력을 row_count
row_count
행으로 제한 할 수 있습니다. LIMIT
가 지정되어있는 경우 OFFSET
을 추가하여 행 집합이 offset
offset
행 분 오프셋 된 상태에서 출력을 시작할 수 있습니다.
기본적으로 SHOW PROFILE
은 Status
및 Duration
열을 표시합니다. 이 Status
값은 SHOW PROCESSLIST
으로 표시되는 State
값과 비슷하지만, 일부의 상태 값은이 두 문장의 해석에 약간의 차이가 일부있을 수 있습니다 ( 섹션 8.12.5 " 스레드 정보 검사 " 를 참조하십시오).
옵션의 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()
시스템 호출에 의존하는 값의 경우,이 시스템 호출을 지원하지 않는 Windows 등의 시스템에서는 NULL
이 반환됩니다. 또한 프로파일 링은 스레드 단위가 아니라 프로세스 단위입니다. 즉, 서버에서 사용자 자신의 스레드가 아닌 스레드의 활동이 사용자에게 표시되는 타이밍 정보에 영향을 미칠 수 있습니다.
프로파일 링 정보도 INFORMATION_SCHEMA
의 PROFILING
테이블에서 얻을 수 있습니다. 섹션 21.16 "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;