−스냅샷 격리와 쓰기 왜곡
SQL의 격리 수준은 dirty read, nonrepeatable read, phantom 같은 이상 현상으로 설명돼 왔다. Berenson 등의 분석에서 드러나듯 안정적인 스냅샷을 읽는 것과 직렬가능성은 서로 다른 성질이다.[각주 4] 같은 시점의 데이터를 읽더라도 서로 다른 행을 쓰는 두 트랜잭션이 함께 규칙을 깨뜨릴 수 있는데, 이 쓰기 왜곡을 보면 “같은 행을 덮어쓰지 않았다”만으로는 동시 실행이 올바른지 판정할 수 없다.
Ports와 Grittner의 논문은 PostgreSQL 9.1의 SSI 구현이 제공하는 격리와 그 비용, 충돌 검사를 확인하는 근거로 쓰인다. 논문의 당직 예에서 두 트랜잭션은 각각 당직자 두 명을 읽은 뒤 자기 행만 근무 종료로 바꿀 수 있고, 스냅샷 격리에서는 쓰기 대상이 달라도 최종 당직자가 0명이 되는 실행이 가능하다. SSI는 읽기·쓰기 의존성을 추적해 직렬가능성을 깨뜨릴 수 있는 실행을 중단하는데, 거짓 양성 때문에 직렬가능한 실행이 중단될 수도 있다.[각주 5]
+상태 변환과 복구 범위 (1981)
Jim Gray의 1981년 논문은 동작을 비보호(unprotected)·보호(protected)·실제(real) 동작의 세 부류로 나눠 복구 범위를 구분한다. 비보호 동작은 트랜잭션이 중단돼도 되돌리거나 다시 실행할 필요가 없고, DB 변경 같은 보호 동작은 되돌리거나 다시 실행할 수 있어야 한다. 현금 배출 같은 실제 동작은 한 번 일어나면 되돌릴 수 없으므로 커밋할 때까지 미룬다.[각주 2] 이 구분은 훗날 원격 서비스 호출이나 메시지 전달을 로컬 롤백과 어떻게 연결할지 이해하는 데도 쓰인다.
복구 시스템은 어떤 변경이 같은 작업에 속하고 무엇이 이미 확정됐는지 알아야 한다. 작업 경계와 커밋 기록이 제어 문법이면서 동시에 복구 판단의 근거가 되는 이유다.
ACID와 복구 기법의 공통 언어 (1983)
성질 | 다루는 문제
Atomicity, 원자성 | 일부 변경만 확정되는 일을 막고 작업의 전부 또는 취소를 정한다
Consistency, 일관성 | 선언한 무결성·업무 규칙을 유지하는 상태 변환을 요구한다
Isolation, 격리성 | 함께 실행되는 트랜잭션 사이의 관찰과 영향을 다룬다
Durability, 내구성 | 커밋된 결과를 저장·복구 계약에 따라 유지한다
Härder와 Reuter의 1983년 논문은 로그와 체크포인트, 변경을 저장 장치에 반영하는 전략을 공통된 개념으로 비교한다. WAL은 변경된 데이터 페이지를 저장 장치에 쓰기 전에 복구에 필요한 로그를 먼저 영속화하는 규칙이다.[각주 3][각주 6] 일관성이 요구하는 업무 규칙은 스키마와 애플리케이션이 표현해야 한다. DB는 잘못 작성한 계산의 의도까지 알아내 주지 않는다.
1983년의 정리는 서로 다른 복구 구현을 같은 질문으로 비교할 공통 용어가 자리 잡은 과정을 보여준다.
SQL 격리 수준과 쓰기 왜곡 (1995)
SQL의 격리 수준은 dirty read, nonrepeatable read, phantom 같은 이상 현상으로 설명돼 왔다. Hal Berenson 등의 1995년 분석에서 드러나듯 안정적인 스냅샷을 읽는 것과 직렬가능성은 서로 다른 성질이다.[각주 4] 같은 시점의 데이터를 읽더라도 서로 다른 행을 쓰는 두 트랜잭션이 함께 규칙을 깨뜨릴 수 있는데, 이 쓰기 왜곡을 보면 “같은 행을 덮어쓰지 않았다”만으로는 동시 실행이 올바른지 판정할 수 없다.
스냅샷 위의 직렬가능성 구현 (2012)
Dan R. K. Ports와 Kevin Grittner의 2012년 논문은 PostgreSQL 9.1의 SSI 구현이 제공하는 격리와 그 비용, 충돌 검사를 확인하는 근거로 쓰인다. 논문의 당직 예에서 두 트랜잭션은 각각 당직자 두 명을 읽은 뒤 자기 행만 근무 종료로 바꿀 수 있고, 스냅샷 격리에서는 쓰기 대상이 달라도 최종 당직자가 0명이 되는 실행이 가능하다. SSI는 읽기·쓰기 의존성을 추적해 직렬가능성을 깨뜨릴 수 있는 실행을 중단하는데, 거짓 양성 때문에 직렬가능한 실행이 중단될 수도 있다.[각주 5]