본문 바로가기
프로그래밍/데이터베이스

[MARIADB] 쿼리 프로파일링

by 소나기_레드 2023. 3. 7.

MySQL은 프로파일링(Profiling)기능이 있습니다. 
프로파일링은 런타임시 병목구간을 찾아내는 행위를 의미합니다.
MySQL의 프로파일링은 만든 질의문을 실행할 때, 진행별 상황별 걸리는 시간을 체크해줍니다.
이것이 가능한 이유는 information_schema에 PROFILING 테이블이 존재해서 SET PROFILING = 1;로만 지정하면 그 이후로 실행되는 모든 질의문을 프로파일링하여 이 테이블에 로깅합니다.

프로파일링으로 실제 질의문이 실행하는데 걸리는 시간, 테이블에 접근하는 시간, CPU점유율, Memory 점유율등 다양하게 해석할 수 있습니다.

SHOW PROFILES; 를 통해 이전에 실행한 질의문들의 Query_id를 알수 있고, information_schema.profiling 테이블을 조회해 봄으로써 결과를 알 수 있다.

예)
프로파일 설정
 - mysql> SET PROFILING=1;     <--- 디폴트는 OFF임
 - mysql> SET PROFILING_HISTORY_SIZE=30;    <---  디폴트는 15

SHOW PROFILES;

SELECT query_id, duration, state
FROM information_schema.profiling WHERE query_id =알아낸Query_id ;

를 통해 해당 질의문에 대한 프로파일링 결과를 볼 수 있습니다.

프로파일링은 이처럼 일반적인 질의문으로 작성할 수 있기 때문에 응용프로그램내에 사용된 질의문들이 실행시 병목구간을 찾아 개선할 수 있는 테스트 프로그램을 어렵지 않게 만들 수 있습니다. 가령, 응용프로그램 작성시 질의문을 응용프로그램 코드 안에 포함시키지 않고 분리해 둔 다음, 테스트만 따로 할 수 있도록 사용하면 테스트 및 최적화/튜닝에 도움이 될 것 같습니다.

Explain은 SELECT밖에 지원되지 않는 반면, 프로파일링은 모든 질의문에 응용이 가능합니다.

<참고>
HeidiSQL 9.4.0.5156 버전 기준
쿼리 탭의 우측에 보면 쿼리 프로필이라는 체크 박스가 있는데, 프로파일링 할 쿼리가 있는 쿼리탭에서 쿼리 프로필 체크박스를 체크 하면, information_schema.profiling 테이블에 로깅 하므로, 쿼리 조회를 해 보면, 프로파일링 결과를 알 수 있다.

댓글