[DATABASE] PostgreSQL은 row를 바로 읽지 않는다: heap tuple, TID, MVCC를 연결해서 보기

·
Computer Science/Database
PostgreSQL storage를 공부하면서 가장 먼저 정리해야 할 감각은 이것이었다.PostgreSQL에서 우리가 row라고 부르는 것은, 내부적으로는 snapshot에 따라 visible하다고 판단된 heap tuple version이다. SQL을 쓸 때는 당연히 row 단위로 생각한다.SELECT *FROM usersWHERE id = 1; 겉으로 보면 users 테이블에서 id = 1인 row 하나를 읽는 작업이다. 그런데 PostgreSQL 내부로 들어가면 흐름이 조금 달라진다. PostgreSQL 인덱스는 row 전체를 저장하지 않는다. 인덱스 leaf에는 인덱스 대상 컬럼 값들과, 그 값을 가진 heap tuple 위치(TID)만 들어 있다. heap에는 하나의 logical row에 대한..