책너두 (Real MySQL 8.0 1권) 37일차 (~418p)

요약

  • 실행 계획을 확인하는 방법을 알게 됨.
    • DESC, EXPLAIN 명령으로 확인 가능
    • 8.0부터 옵션이 추가됨. (출력 포맷, 실제 쿼리 실행 결과 확인 가능)
  • 실행 계획 출력 포맷
    • JSON, TREE, 단순 테이블
  • 쿼리 실행 시간을 확인할 수 있음.
    • EXPLAIN ANALYZE 명령 이용
    • loops 값이 1 이상이면 각 필드 값에 나타나는 값들은 평균 값임.
  • 실행 계획 분석을 위한 각 칼럼을 이해해야 함.
    • id 칼럼은 단위 쿼리를 기준으로 접근 순서를 표현함
    • 테이블의 접근 순서를 말하는 것은 아님

메모

실행 계획 확인

  • MySQL 서버의 실행 계획은 DESC 또는 EXPLAIN 명령으로 확인할 수 있음.
  • 8.0 버전부터는 EXPLAIN 명령에 사용할 수 있는 새로운 옵션이 추가됨.
    • 실행 계획의 출력 포맷과 실제 쿼리의 실행 결과까지 확인할 수 있음.

실행 계획 출력 포맷

  • 이전 버전에서는 EXPLAIN EXTENDED 또는 EXPLAIN PARTITIONS 명령이 구분되어 있었음.
  • MySQL 8.0 버전부터는 모든 내용이 통합되어 보이도록 개선되면서 PARTITIONS 나 EXTENDED 옵션은 문법에서 제거됨.
  • 8.0 버전부터 FORMAT 옵션을 사용해 실행 계획의 표시 방법을 JSON 이나 TREE, 단순 테이블 형태로 선택할 수 있음.

쿼리의 실행 시간 확인

  • MySQL 8.0.18 버전부터 쿼리의 실행 계획과 단계별 소요된 시간 정보를 확인할 수 있는 EXPLAIN ANALYZE 기능이 추가됨
    • SHOW PROFILE 명령으로 어떤 부분에서 시간이 많이 소요되는지 확인할 수 있지만, 실행 계획의 단계별로 소요된 시간 정보를 보여주진 않음.
    • EXPLAIN ANALYZE 명령은 항상 결과를 TREE 포맷으로 보여주기 때문에 EXPLAIN 명령에 FORMAT 옵션을 사용할 수 없음.
      • TREE 포맷의 실행 계획에서 들여쓰기는 호출 순서를 의미함.
  • EXPLAIN ANALYZE 명령의 결과에는 단계별로 실제 소요된 시간(actual time)과 처리한 레코드 건수(rows), 반복 횟수(loops)가 표시됨.
    • loops 필드 값이 1 이상이면, actual time과 rows 필드는 평균 값임.
  • EXPLAIN ANALYZE 명령은 EXPLAIN 명령과 달리, 실행 계획만 추출하는 것이 아니라 실제 쿼리를 실행하고 사용된 실행 계획과 소요된 시간을 보여주는 것임.
    • 그래서 쿼리 실행 시간이 아주 많이 걸리는 쿼리라면 EXPLAIN ANALYZE 명령을 사용하면 쿼리가 완료돼야 실행 계획의 결과를 확인할 수 있음.
    • 쿼리 실행 계획이 나쁜 경우라면 EXPLAIN 명령으로 먼저 실행 계획만 확인해서 어느 정도 튜닝한 후 EXPLAIN ANALYZE 명령을 실행하는 것이 좋음.

실행 계획 분석

  • 8.0 버전부터 EXPLAIN 명령의 결과로 출력되는 실행 계획의 포맷을 기존 테이블 포맷과, JSON, TREE 형태로 선택할 수 있음.
    • 출력 포맷보다는 어떤 인덱스를 사용하는지 이해하는 것이 중요함.
  • 실행 계획의 각 칼럼이 어떤 것을 의미하는지, 그리고 각 칼럼에 어떤 값들이 출력될 수 있는지 하나씩 살펴본다.

id 칼럼

  • 하나의 SELECT 문장은 다시 1개 이상의 하위(SUB) SELECT 문장을 포함할 수 있음.
  • SELECT 키워드를 단위로 구분한 것을 “단위(SELECT) 쿼리” 라고 표현한다.
  • 실행 계획에서 가장 왼쪽에 표시되는 id 칼럼은 단위 SELECT 쿼리별로 부여되는 식별자 값임.
    • 하나의 SELECT 문장 안에 여러 개의 테이블을 조인하면, 조인되는 테이블의 개수만큼 실행 계획 레코드가 출력되지만, 같은 id 값이 부여됨.
    • 조인이 아니라 서브쿼리 형태의 단위 SELECT 쿼리로 구성되어 있다면 실행 계획의 각 레코드가 다른 id 값을 지니게 됨.
    • p 417에 예시가 잘 설명되어 있음.
  • 주의해야할 점은, 실행 계획의 id 칼럼이 테이블의 접근 순서를 의미하지는 않음.
    • p 419에 예시가 잘 설명되어 있음.

댓글

Designed by JB FACTORY