[MariaDB] Galera Cluster에서의 Isolation Level 요약

 

Isolation이란?

  • Isolation은 여러 트랜잭션이 동시에 실행될 때, 서로의 작업에 간섭하지 않도록 하는 성질입니다.
  • 격리 수준이 없으면 데이터 충돌이나 무결성 오류가 발생할 수 있습니다.
  • 높은 격리 수준 → 데이터 무결성 확보, 성능 저하.
  • 낮은 격리 수준 → 성능 향상, 무결성 위험 증가.

Isolation Level이 필요한 이유

  • 동시에 두 트랜잭션이 같은 레코드(X=500)를 업데이트하려 할 때:
    • 트랜잭션1: X + 500 (→ 1000으로 업데이트 후 커밋)
    • 트랜잭션2: 이전 값 500을 읽고 500 - 500 = 0을 저장 (잘못된 결과)
  • Isolation이 없다면 트랜잭션2가 잘못된 오래된 데이터를 기반으로 처리하게 되어 데이터 불일치가 발생.

Galera Cluster의 Isolation Level 종류

1. Read Uncommitted (Dirty Read)

  • 커밋되지 않은 데이터도 읽을 수 있음.
  • Isolation이 거의 없음, 데이터 무결성 위험.

2. Read Committed

  • 커밋된 데이터만 읽을 수 있음.
  • 각각의 쿼리는 다른 스냅샷을 참조할 수 있어 읽을 때마다 값이 변할 수 있음.

3. Repeatable Read

  • 첫 SELECT 시점의 데이터 스냅샷을 기준으로 모든 쿼리 수행.
  • 이후 커밋된 다른 트랜잭션의 변경사항은 보이지 않음.
  • MySQL InnoDB의 기본값.
  • Galera Cluster의 동기식 복제 메커니즘충돌 감지 특성 때문에, 멀티마스터 환경에서는 사실상 Repeatable Read유일하게 안정적으로 작동하는 격리 수준입니다.

4. Serializable

  • 모든 행에 읽기 잠금(Read Lock)을 걸어 데이터 충돌 방지.
  • 사실상 Read Only 트랜잭션처럼 동작.
  • 가장 높은 격리 수준으로, Phantom Read를 포함한 모든 이상 현상을 방지.
  • 그러나 동시성을 크게 저해하여, Galera Cluster Multi-Master 환경에서는 실질적으로 사용이 불가능하거나 극도로 제한적입니다.

Galera Cluster에서의 제한사항

  • Galera Cluster는 기본적으로 Multi-Master(Active-Active) 복제 구조를 채택합니다.
  • 멀티마스터 모드에서는 Repeatable Read 격리 수준만 실질적으로 지원됩니다.
    • 이유: 트랜잭션 커밋 시 Write-Set Certification을 통해 충돌을 감지하고, 이 과정에서 스냅샷 일관성이 필수적이기 때문입니다.

핵심 정리

  • 높은 격리 수준은 데이터 무결성을 높이지만 성능 저하를 가져옴.
  • Galera Cluster는 멀티 마스터 환경에서 트랜잭션 일관성을 위해 Repeatable Read만을 실질적으로 지원.

마치며

Galera Cluster는 분산 환경에서도 데이터 무결성을 유지하기 위해 Repeatable Read 격리 수준을 중심으로 설계되었습니다. 다른 격리 수준은 멀티마스터 구조의 특성과 충돌 감지 메커니즘에 부합하지 않아 사용이 제한적입니다. 따라서 Galera 환경에서는 트랜잭션 일관성과 성능의 균형을 고려해 Repeatable Read를 기준으로 시스템을 운영하는 것이 필수적입니다.

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용