SELECT @@profiling;
1이면 프로파일링 활성화 상태 0이면 비활성화
SET profiling=1;
→ 프로파일링 활성화
SHOW profiles;
실행된 쿼리 성능 확인 가능(프로파일링 활성화 되어야함)
SHOW profile FOR query 2;
→ query_id가 2인 쿼리의 각 단계별 실행 시간
각 단계별 의미
- starting
쿼리 처리가 시작됨. 쿼리 요청을 받았고, 처리 준비를 시작 - Executing hook on transaction
트랜잭션에 대한 후크 실행단계. 여기서 트랜잭션과 관련된 후크(사용자 정의된 작업이나 트리거)를 실행 - checking permissions
사용자가 실행하려는 쿼리에 대한 권한을 확인. 테이블이나 데이터베이스에 대한 권한이 있는지 검사 - Opening tables
필요한 테이블을 열고 테이블에 대한 메타데이터 로드, 쿼리에서 참조 테이블에 접근하기 위해 테이블을 준비하는 단계 - init
쿼리 처리 준비 완료. 쿼리 파서(구문 분석기)가 실행되고, 쿼리의 구조를 확인 - System lock
테이블이나 데이터에 시스템 잠금 설정. 잠금은 데이터의 일관성을 보장하기 위해 필요할 수 있음. - optimizing
쿼리 최적화 단계. 실행 계획을 세우고, 인덱스를 사용할지, 조인 순서를 어떻게 할지 등에 대해 결정 - statistics
통계를 수집하고 테이블 및 인덱스에 대한 메타정보를 사용하여 최적의 쿼리 실행 계획을 수립 - preparing
쿼리 실행을 위한 데이터 준비 단계. 필요한 버퍼 할당, 디스크에서 데이터를 읽어오거나 캐시에 데이터를 가져오는 작업을 준비 - executing
쿼리가 실제로 실행. 이 단계에서 데이터가 읽히고 조작되며, 결과가 생성됨 - end
쿼리가 성공적으로 완료. 결과가 생성된 상태 - query end
쿼리 실행 종료, 클린업을 시작하는 단계. 결과가 클라이언트에게 반환될 준비 - waiting for handler commit
핸들러가 트랜잭션 커밋을 대기 중인 상태. 데이터베이스가 변경된 데이터를 실제로 커밋하고 완료하는 단계 - closing tables
사용된 테이블 닫음. 테이블이나 인덱스에 잠금이 있었다면 이 단계에서 해제 - freeing items
쿼리 실행 중 사용된 메모리나 자원을 해제 - cleaning up
마지막으로 쿼리 실행 후 남은 모든 자원을 정리. 쿼리 처리 과정이 완전히 종료
SHOW profile CPU FOR QUERY 2;
위의 쿼리 처리 단계별 실행 시간에서 CPU 사용량도 추가로 확인 가능