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 테이블에 로깅 하므로, 쿼리 조회를 해 보면, 프로파일링 결과를 알 수 있다.
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
[오라클] 락 정보 조회 쿼리 및 락 세션 KILL (1) | 2023.03.07 |
---|---|
[SQLite] SQLite 의 모든 것 (1부) - 소개 및 FAQ (1) | 2023.03.07 |
[MARIADB] 테이블 및 컬럼 정보 조회 쿼리 (0) | 2023.03.07 |
[데이터베이스] 다양한 DB에서의 validation Query (0) | 2023.03.07 |
[mySQL] MySQL에서 대용량 테이블의 경우 성능 개선을 위한 10 가지 방안 (0) | 2023.03.07 |
댓글