Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

PostgreSQL / PPAS MVCC 본문

PostgreSQL/아키텍처 및 내부 구조

PostgreSQL / PPAS MVCC

`O` 2021. 3. 7. 22:50
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

  • 각 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 목적 및 종류

 

 

반응형
Comments