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 절을 지정하지 않으면 출력은 최근에 실행 된 문에 관련한 것입니다. nFOR QUERY 이 포함되어있는 경우, nSHOW PROFILE 명령문 n 에 대한 정보를 표시합니다. n 값은 SHOW PROFILES 에 의해 표시되는 Query_ID 값에 해당합니다.
LIMIT 절을 지정하면 출력을 row_countrow_count 행으로 제한 할 수 있습니다. LIMIT 가 지정되어있는 경우 OFFSET 을 추가하여 행 집합이 offsetoffset 행 분 오프셋 된 상태에서 출력을 시작할 수 있습니다.
기본적으로 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;