본문 바로가기

PostgreSQL

04. PostgreSQL - tuple을 읽고 쓰는 방법

앞서 heap table의 내부 구조를 살펴봤다.

https://lsmdd.tistory.com/101

 

3. PostgreSQL - heap table file layout

heap table, index, free space map 그리고 visibility map은 모두 data file임.data file을 다시 작게 쪼개보면 8KB(8192 bytes - default)의 page(=block)로 구성되어 있음. 각 data file 내부의 pages에는 block number가 있고 0부터

lsmdd.tistory.com

 

이번 장에서는 앞서 공부한 내용을 바탕으로 page내 tuple이 write될 때 어떤 변화가 발생하는지 보고

page내 tuple을 어떻게 읽는지도 살펴볼 예정이다.

 

page에 tuple을 write할 때 

아래 그림의 (a)의 상황을 설명

    page에 이미 하나의 tuple이 있다고 가정하고 시작하자.

    앞서 배운 page header의 pd_lower는 첫번 째 line pointer인 1이 기록됨.

    그리고 pd_upper와 line pointer에는 첫번 째 tuple을 가리킴.

 

아래 그림의 (b)의 상황을 설명

    두번 째 tuple이 insert되면 line pointer및 tuple이 추가됨.

     line pointer는 이미 추가된 line pointer 1 뒤에 오게 되고

     2번 째 tuple은 1번 째로 추가된 tuple보다 앞쪽에 오게 된다.

     pd_lower는 2번 째 line pointer를 가리키고  pd_upper는 2번 째 tuple을 가리킨다.

     다른 page header(pd_lsn, pg_checksum, pg_flag)도 update되는데 MVCC와 연관된 header 정보임.

page내 tuple을 읽을 때

일단 page를 읽을 때 access 하는 방법은 크게 2가지 임.

    sequential scan

         각 page에 있는 line pointer를 스캔하면서 모든 page내  모든 tuple을 sequentially하게 읽는 방법

    B-tree index scan

          먼저 index file을 읽으면서 index key와 heap table tuple을 가리키는 TID가 포함된 index tuple을 찾음.

           index key를 갖고 있는 index tuple을 찾으면 index tuple에 저장된 TID를 이용해 원하는  heap table tuple을 읽음.

           따라서 page들을 모두 읽을 필요 없이 원하는 heap tuple만 읽을 수 있음.

           아래 그림(b)의 예시를 설명하면

                index scan을 통해 찾은 index tuple의 TID 값을 이용해 heap table을 찾는데

                table에서 7번째 page안에 있는 2번째 tuple을 찾아가는 보여줌.

                이 과정을 통해 불필요한 tuple을 스캔하지 않고 원하는 tuple만 읽음. 

 

scan 관련 내용 및 인덱스 관련해서는 추후 정리

TID-Scan

Bitmap-Scan

index-Only-Scan

Sequentail scan

Covering indexes

 

Hash

BTree

GiST

SP-GiST

GIN

'PostgreSQL' 카테고리의 다른 글

07. PostgreSQL - transaction처리 이해하기  (5) 2024.12.17
06. PostgreSQL - MVCC 개념  (4) 2024.12.17
3. PostgreSQL - heap table file layout  (5) 2024.12.15
0. postgreSQL internal  (1) 2024.12.15
2. PostgreSQL internal - physical structure  (6) 2024.12.15