본문 바로가기

PostgreSQL

19. PostgreSQL - index-only scans

I/O 비용을 줄이기 위해 index-only scans을 사용할 수  있음.

select 될 column이 모두 index의 column에 포함되어 있어야 table pages에 접근하지 않고 index column만 읽음.

보통 모든 RDBMS에서 제공하지만 PostgreSQL에서는 index column에 포함되어 있다고 무조건 index-only scan을 하지 않음.

 

index-only scan을 위한 조건

select할 column이 index column이어야 함.

조회하려는 table의 data가 저장된 page의 VM(visibility Map)의 visibility bit가 1이어야 함.

 

VM까지 확인해야 하는이유

index tuple에는 heap tuple처럼 t_xmin, t_xmax 정보가 저장되지 않음.

그래서 index tuple에 저장된 column 값의 변경 여부를 index만으로는 판단할 수 없음.

 

그렇다고 table의 page까지 읽으면 비효율적인 상황이 발생함.

그래서 table page에 저장된 값에 변경 여부를 확인하고자 VM을 이용함.

 

따라서 index-only scans을 위해서는 VM 정보도 확인할 수  밖에 없음.

 

간단한 예시

index column으로 id와 key를 사용하고 있음.

select 문의 칼럼이 모두 index column이므로 index-only scan을 할 수 있는 첫번 째 조건을 충족함.

그러나 VM의 조건은 아래와 같음.

    Tuple_18이 저장된 0번 째 page의 visibility map의 visibility bit =1 

    Tuple_19가 저장된 1번 째 page의 visibilty map의 bit = 0

Tuple_18의 경우 table의 page를 확인할 필요가 없어 index-only scan 가능.

Tuple_19의 경우 table의 page를 확인해야하므로 index-only scan이 불가능.

'PostgreSQL' 카테고리의 다른 글

21.PostgreSQL - WAL(Write Ahead Log)  (2) 2024.12.28
20. PostgreSQL - buffer manager  (2) 2024.12.25
18. PostgreSQL - Heap-Only Tuples(HOT)  (1) 2024.12.25
17. PostgreSQL - vacuum full  (3) 2024.12.25
16.PostgreSQL - autovacuum  (2) 2024.12.25