DB & AWS Knowledge
PostgreSQL / PPAS MVCC 본문
728x90
반응형
- 해당 페이지에서는 PostgreSQL / PPAS MVCC 에 대한 Mechanism 을 다룬다.
(출처1 : https://medium.com/myinterest/innodb와-postgresql의-mvcc-4471b721cb31)
(출처3 : https://www.enterprisedb.com/blog/well-known-databases-use-different-approaches-mvcc)
(참고도서 : Oracle, PostgreSQL, MySQL Core Architecture)
(출처2 : https://www.slideshare.net/pgday_seoul/mvcc-in-postgre)- 먼저 MVCC 의 개념 및 공통적인 특징은 아래와 같다.
- MVCC 는 Multi Version Concurrency Control 의 약자로써 수정 및 읽기에 대한 동시 대상의 DB 데이터가 있을 시
상호간의 충돌을 막고, 세션별로 해당 데이터를 쓰거나 조회하는 시점의 데이터의 정합성을 보장하는 메커니즘을 뜻한다. (각 세션별로 사용하는 시점의 데이터를 스냅샷 이미지라고 한다.) - 첫 개념은 E.F Codd 박사가 1970년 RDBMS 논문에서 MVCC 개념 확립을 위한 기초 개념 정리에서 시작되었다.
- 그 후, 1981년 Philip A. Bernstein 과 Nathan Goodman 이 MVCC 의 개념을 확립하여 실제 RDBMS 에 적용 될 수 있도록 MVCC 용어 및 기능을 정립했다.
- 1986년, Bob Miner 가 Oracle Ver 6 에서 Rollback Segment 개념 도입 및 적용을 하여 MVCC 메커니즘을 발전 시켰다.
- 1999년, Mikheev Vadim B. 가 PostgreSQL 에도 MVCC 개념을 도입했다.
- MVCC 는 크게 두가지 작동구조가 있다.
- 다중 세대 아키텍처 (MGA: Multi Generation Architecture)
데이터 row (DB 이론 용어로는 튜플이라고 표현한다.) 변경시 이에 대한 동일 페이지 (데이터 블록) 내에서 변경내역에 따른 신규 튜플 추가 및 버전 기입을 통하여 (new, old)
각 시점별 데이터 변경이력을 저장하는 방식 (PostgreSQL, MS-SQL 이 사용)- 롤벡 세그먼트 사용
- 롤백세그먼트 (ORACLE 은 9i 부터는 언두세그먼트라 지칭) 라는 old 시점의 변경 데이터 내역을 보관하는 공간에 일괄적으로 변경내역을 보관하면서
각 데이터별 시점 정합성을 유지해 나가는 방법 (Oracle, MySQL 이 사용)
MySQL / MariaDB (InnoDB) MVCC 는 옆의 링크로 참조 : MySQL / MariaDB MVCC
- MVCC 는 Multi Version Concurrency Control 의 약자로써 수정 및 읽기에 대한 동시 대상의 DB 데이터가 있을 시
- 각 RDBMS 는 MVCC 의 작동 구조를 구현하기 위해서 트랜잭션ID (XID) 및 데이터가 기록되는 시점 정보 개념을 사용한다. [ ex) ORACLE 의 SCN : System Change Number ]
XID 는 DB내에서 데이터 변경을 유발하는 트랜잭션들에 부여 되는 고유 ID 이고 SCN 은 각 데이터들에 대해서 변경 발생 시, 이에 대해서 발생시점 등의 정보가 값으로 변환 되어 부여되는 개념이다. - PostgreSQL / PPAS 는 아래의 MVCC 특징을 가진다.
- PostgreSQL / PPAS 는 ORACLE, MySQL 와는 다르게 롤백세그먼트의 개념이 없다.
- 대신 같은 공간에서 각 레코드의 버젼별로 공간을 부여한 후, 일괄로 저장해 둔다.
MySQL 과 같이 단일 데이터블록단위를 page 라고 부르며 이러한 page 묶음으로 레코드를 저장한 형태를 heap 이라고 한다. - 모든 레코드(튜플)에는 TID (Transaction ID) 가 부여 되고, 이를 통하여 MVCC 내의 스냅샷 버전을 관리한다.
- 아래와 같이 xmin (insert / update 시 부여되는 TID), xmax (delete 시 부여되는 TID) 를 중심으로 모든 변경 레코드에 변경 버전이 기록되고
이러한 모든 레코드가 저장공간에 그대로 모두 기록된다. - PostgreSQL / PPAS 는 이러한 구조로 모든 기록들이 저장되기 때문에 나중에 더이상 관리가 필요하지 않은 찌꺼기 기록 (영문 그대로 Garbage 라 한다)들을 정리해 줄 필요가 있다.
(이를 Garbage Collection 이라 한다) 이를 위해서 존재하는 개념이 Vacuum 이다.
항목 참조 : Vacuum 목적 및 종류
- 레코드 간략화구조 (출처 : https://www.slideshare.net/pgday_seoul/mvcc-in-postgre)
- 레코드 간략화구조 (출처 : https://www.slideshare.net/pgday_seoul/mvcc-in-postgre)
- PostgreSQL / PPAS 는 ORACLE, MySQL 와는 다르게 롤백세그먼트의 개념이 없다.
-
-
- 레코드 상세구조 (출처 : https://www.slideshare.net/pgday_seoul/mvcc-in-postgre)
- 레코드 상세구조 (출처 : https://www.slideshare.net/pgday_seoul/mvcc-in-postgre)
-
반응형
'PostgreSQL > 아키텍처 및 내부 구조' 카테고리의 다른 글
PostgreSQL / PPAS DB Age (0) | 2021.04.16 |
---|---|
PostgreSQL / PPAS 기본 아키텍처 (Engine) (0) | 2021.03.19 |
PostgreSQL / PPAS index 종류 (0) | 2021.03.11 |
PostgreSQL / PPAS Lock 종류 (0) | 2021.03.08 |
PostgreSQL / PPAS 트랜잭션 Isolation Level (0) | 2021.03.07 |
Comments