공부, 기록

[postgreSQL] 인덱스 스캔 방법 본문

공부/DATABASE

[postgreSQL] 인덱스 스캔 방법

무는빼주세요 2024. 8. 25. 17:35

해당 글은 postgreSQL 9.6 성능이야기 책을 읽고 이해한 내용을 정리하였습니다. 

 

PostgreSQL의 실행계획 명칭

PostgreSQL은 다음 5가지 스캔 방식을 사용한다.

    • Sequential Scan :  Sequential Scan은 테이블의 모든 데이터를 하나씩 확인하는 방법
    • Index Scan : 인덱스를 탐색하는 방식. 
      Bulk Read로부터 Buffer를 보호하는 방법
       IO 유형을 4가지로 구분하고이때 Bulk Read인 경우에는 Ring Buffer를 사용하도록 한다.
       Bulk Read Shared Buffer 1/4 보다 큰 테이블에 대한 Seq Scan을 의미한다.
       Bulk Read를 위한 Ring Buffer의 크기는 32 블록이다.
  • Index Only Scan : MySQL의 커버링 인덱스를 사용하는 것과 같은 방식
  • Bitmap Scan : Index Scan과 Sequential Scan이 조합된 방식
    • Bitmap Index Scan 단계에서 인덱스 자료구조를 스캔하며 조건에 해당하는 인덱스의 데이터를 이용해서 bitmap을 생성한다(조건에 맞으면 1 아니면 0). 이 bitmap에는 인덱스에 해당하는 테이블의 row에 접근할 수 있는 정보가 담겨 있다.
    • Bitmap Heap Scan 단계에서는 앞서 생성된 bitmap을 스캔하면서 조건에 맞는 실제 데이터를 가져오게 된다.
  • TID Scan : TID는 Tuple Indecator의 줄임말인데 특정 row의 실제 위치를 나타내는 6byte 값으로, 4byte는 페이지 번호, 2byte는 페이지 내의 튜플 인덱스를 나타낸다고 한다 (PostgreSQL 버전의 rowid개념으로 보인다)
    쿼리 조건에 ctid가 있는 경우에 사용이되는 특수한 경우.

EXPLAIN 명령어 옵션

  • ANALYZE– 이 매개변수는 쿼리를 실행하고 각 단계에 대한 계획, 비용 추정, 실제 전후 런타임, 실제 행 수를 표시합니다. 이 매개변수를 실행하면 테이블의 통계도 업데이트됩니다.
  • BUFFERS– 이것은 ANALYZE와 함께만 사용할 수 있습니다. 각 단계가 읽고, 쓰고, 더티하는 블록 수(기본적으로 8 KiB 크기)를 보여줍니다.
  • VERBOSE– 이것은 쿼리 실행 계획의 각 단계에 대한 모든 출력 표현식을 표시합니다. 실행자가 자주 실행되는 값비싼 함수에서 시간을 보내는 경우에 유용합니다.
  • SETTINGS– 이 매개변수는 기본값과 다른 모든 성능 관련 매개변수를 출력에 표시합니다.
  • WAL– PostgreSQL v13부터 이 매개변수는 데이터 수정 명령문으로 인해 발생한 WAL 로그를 표시합니다. ANALYZE와 함께만 사용할 수 있습니다.
  • FORMAT– 이는 출력 형식을 지정합니다. 기본값은 TEXT이며 쿼리 성능을 분석하는 데 사용됩니다. 다른 옵션은 XML, JSON 및 YAML이며 자동화된 처리에 사용됩니다.

'공부 > DATABASE' 카테고리의 다른 글

[AWS] ElastiCache 란?  (0) 2024.09.15
[AWS] RDS 스냅샷  (0) 2024.09.15
SQL Server, MySQL , PostgreSQL 플랜캐시  (0) 2024.07.20
[postgreSQL] 아키텍처와 Shared Buffer  (0) 2024.07.06
[AWS] Aurora 공부 2 (Aurora의 기능들)  (0) 2024.07.06