MySQL Profiling
MySQL에서 실행한 쿼리들이 각 수행 시간이 얼마가 걸렸는지 확인할 수 있는 기능으로 쿼리 프로파일링(Query Profiling)을 제공합니다.
profiling 설정을 활성화하면 앞으로 실행되는 모든 쿼리문의 수행 시간을 기록합니다.
profiling 속성은 적지 않은 부하를 생성하기 때문에, 기본값으로는 OFF로 되어있습니다.
Profiling 옵션 확인
Profiling 옵션의 활성화 여부는 다음과 같이 확인합니다.
SELECT @@profiling;
결과 값이 1이면 ON, 0이면 OFF 입니다.
활성화
쿼리 프로파일링을 다음과 같이 활성화합니다.
SET profiling=1;
그리고 다시 SELECT @@profiling;
으로 조회를 해보면 아래와 같이 활성화가 되어 있습니다.
성능을 측정할 쿼리를 날려보겠습니다.
DELETE FROM user_info WHERE name LIKE '%naver%' AND no > 1;
성능 측정
실행했던 SQL문들의 수행 시간에 대해서 다음과 같이 조회할 수 있습니다.
SHOW profiles
그러면 해당 쿼리의 수행 시간이 얼마나 걸렸나 측정할 수 있습니다. (환경에 따라 오차가 발생하니 여러번 측정해서 평균을 구해야 합니다.)
SQL문 1개에 대한 성능이 아니라, SQL문을 블록 단위로 쪼갠 더 상세한 정보를 얻고 싶다면 아래와 같이 조회할 수 있습니다. 22는 Query_ID 입니다.
SHOW profile FOR QUERY 22;
해당 쿼리문의 수행 시간을 더 상세한 단위로 얻을 수 있습니다.
기타 (CPU 사용량 체크 등)
아래의 명령어로 해당 쿼리의 CPU 사용량을 분석할 수도 있습니다.
SHOW profile CPU FOR QUERY 22;
결과는 아래와 같습니다.
Profile을 통해 조회할 수 있는 목록입니다.
- ALL
- BLOCK IO
- CONTEXT SWITCHES
- CPU
- IPC
- PAGE FAULTS
- SOURCE
- SWAPS
감사합니다.
'Database > SQL' 카테고리의 다른 글
Database - 교착상태 문제를 해결하는 방법! (0) | 2022.04.20 |
---|---|
MySQL - WHERE 절에서의 인덱스 사용 (+인덱스를 사용하지 않는 쿼리) (0) | 2022.03.20 |
SQL 튜닝 - SELECT 절과 WHERE 절에 동일한 함수가 사용될 때 [성능 비교] (0) | 2022.03.17 |
MySQL - datetime("0000-00-00") 사용하면 안되는 이유! (+ 에러 임시 해결) (2) | 2022.02.20 |
SQL - 트랜잭션 범위 개선 (0) | 2022.02.13 |