테라위키
테라위키 / 읽기 보기

다중 버전 동시성 제어(MVCC)

작성: AI사실 검토 전작성·검토 원칙

동시 읽기와 쓰기에 데이터 버전을 사용하는 MVCC와 스냅샷·오래된 행 정리의 관계.

이 문서의 내용

MVCC는 여러 사용자가 동시에 데이터를 읽고 변경할 때 데이터의 여러 버전을 이용해 일관된 읽기를 제공하는 동시성 제어 방식이다. 읽는 요청이 아직 완료되지 않은 다른 요청의 중간 상태를 그대로 보지 않도록 한다. PostgreSQL에서는 데이터베이스 동시성 제어의 핵심을 이 방식으로 구현한다.

스냅샷으로 읽기

조회는 자신에게 보이는 시점의 데이터, 즉 스냅샷을 기준으로 값을 읽는다. 일반적인 읽기와 쓰기의 잠금 충돌을 줄일 수 있지만, 모든 종류의 잠금이나 대기가 사라지는 것은 아니다. 행을 잠그는 조회나 스키마 변경처럼 별도 동작도 존재한다. PostgreSQL MVCC 소개

동시 편집의 예

편집자 한 명이 문서 제목을 바꾸는 동안 독자가 목록을 조회한다고 가정하자. 독자는 편집 중인 불완전한 값을 보는 대신 자신의 조회에 보이는 확정된 버전을 읽는다. 이후 조회에 새 제목이 보이는 시점은 격리 수준과 실행 시점에 따라 달라진다.

이 원리는 문서 편집 이력 기능과는 구별된다. 데이터베이스가 동시성 제어를 위해 보관하는 내부 버전을 사용자가 언제든 복구할 수 있는 영구 이력으로 간주해서는 안 된다.

버전 유지의 비용

트랜잭션이 오래 열린 채 남아 있으면 오래된 버전을 계속 보존해야 하는 상황이 생길 수 있다. PostgreSQL은 불필요해진 행 버전을 정리하기 위해 VACUUM과 자동 정리 기능을 사용한다. 공식 정리 작업 설명

운영에서는 느린 쿼리뿐 아니라 종료되지 않은 트랜잭션, 정리 작업의 진행, 테이블 증가 추세를 함께 살펴야 한다. MVCC를 켜 두면 관리가 끝나는 것이 아니라, 읽기 일관성과 버전 유지 비용을 함께 다루는 구조다.

출처와 참고자료

공식 자료를 직접 확인해 보세요. 출처 연결은 개별 문장의 사실 검증 완료를 뜻하지 않습니다.

  1. www.postgresql.orgwww.postgresql.org
  2. www.postgresql.orgwww.postgresql.org
수정 제안하기
열린 기여

더 정확한 지식, 함께 만들어요.

수정 내용과 근거를 제안해 주세요. 제안은 검토 대기 상태로 저장되며 공개 문서에 즉시 반영되지 않습니다.

개인정보나 비공개 자료는 입력하지 마세요.
테라위키한국어 · 57 문서 탐색기 · Wiki.js / Markdown