본문 바로가기

PostgreSQL

PostgreSQL EXPLAIN

EXPLAIN

쿼리의 최적화를 위해 사용할 수 있는 튜닝 도구입니다.

SELECT, INSERT, UPDATE, DELETE 에 모두 사용할 수 있습니다.

트리 구조로 가장 왼쪽이 ROOT, 가장 오른쪽이 LEAF 로 읽는 순서는 MySQL 이나 Oracle 과 차이 없습니다.

동 레벨은 위의 오퍼레이션이 먼저 수행 됩니다.

OPTION

  • EXPLAIN
    EXPLAIN + QUERY
  • EXPLAIN ANALYZE
    EXPLAIN ANALYZE + QUERY
  • EXPLAIN ANALYZE BUFFERS
    EXPLAIN ( ANALYZE, BUFFERS ) + QUERY

COST

COST 계산은 TIME BASE 입니다.
COST 를 산정하는 계산식이 존재하며, 대소에 영향을 주는 인자들이 존재합니다.
이 인자값은 시스템, 세션 레벨에서 변경 가능하며, 그 결과로 실행플랜이 변경 됩니다.\

예를 들면 Sequential read 가 발생하는 경우 cost 의 계산식은 다음과 같습니다.

(disk pages read * seq_page_cost) + (rows scanned * cpu_tuple_cost)

위에서 시스템 파라미터는 seq_page_cost, cpu_tuple_cost 이렇게 두 개이며 그 default 값은 다음과 같습니다.

  • seq_page_cost = 1
  • cpu_tuple_cost = 0.01

때문에 disk pages 23 개로 구성 되어있고, rows 가 5,000 개인 테이블은 그 코스트가 73 이 됩니다.

EXPLAIN OPTIONS

EXPLAIN 과 EXPLAIN ANALYZE , EXPLAIN ( ANALYZE, BUFFERS ) 의 차이는 실제 수행여부입니다.

때문에 실제 수행을 하는 ANALYZE 의 경우엔 DML 을 주의해야 합니다.
실제 사용을 해야 한다면 TRANSACTION 을 명시적으로 선언하여 사용하고, 사용이 끝나면 반드시 ROLLBACK 해야 합니다.

ANALYZE 옵션을 사용하는 시점부터 실제 수행에 의한 결과 정보들이 추가로 나옵니다.
실제 해당 오퍼레이션을 시작하는 데 걸린 초기시간과, 완료하기까지의 시간 그리고 처리되어 나온 ROWS 등이 나옵니다.
( 오퍼레이션에 따라 FILTER 된 ROWS 수 정보도 나옵니다. )

ANALYZE + BUFFERS 를 사용하는 경우 사용한 블록 정보도 추가 됩니다.