원인을 결과를 야기한다. 그러므로 원인이 존재하지 않거나 그러한 요소를 제거하면 결과가 발생하지 않는다.
추가로 이 지문은 출제자가 part of와 type of를 오버레이하여 인지 과부화 수준을 높였다. 가령 다음과 같은 추론이 바로 그러한 지점이다.
오염된 읽기는 갱신 과정에서 롤백 할 경우 발생하는 문제이다.
만일 조회작업으로만 구성된 두 트랜잭션이 동시에 실행되면 오염된 읽기는 발생하지 않는다. 왜냐하면 문제의 원인인 갱신 과정이 존재하지 않기 때문이다.
Representation
DBMS와 SQL은 모두 데이터베이스의 관리를 위해 필요한 것이다. 제시문에 정보를 결합하면 DBMS는 일관성과 격리성과 관계하며, SQL은 원자성과 연관이 있다. DB 중 관계형 데이터베이스의 입력값은 정형적 데이터이다. 따라서 형태가 정해지지 않은 데이터는 이러한 논의영역에서 이탈한다.
SQL은 조회 작업과 그 외 다른 작업을 포함한다. 분류의 기준은 내용 변화의 여부이다. 조회 작업으로만 구성된 트랜잭션의 실행은 DB 내용을 변화시키지 않는다. 반면에 조회 작업이 아니라면 DB 내용은 작업 유형에 따라 변하게 된다.
트랜잭션은 원자성, 일관성, 격리성을 요건으로 갖는다. 특성이 충족되어야 한다는 것은 바로 이러한 의미이다. 출제자는 요건 간 허위적 인과를 구성할 수 있는데, 이는 25-②에서 드러난다. 원자성은 작업이 완료되거나 롤백되어야 한다는 것을 말한다.
특히 격리성은 지문의 마지막까지 하이라이트가 표시되는 개념이다. 격리성이 보장되면 트랜잭션의 동시 실행 결과는 순차 실행의 결과와 같다. 즉, 트랜잭션은 실제로 동시에 실행되지만 개념적으로는 순차적 실행과 같다는 것이다. 범주 측면에서 여러 트랜잭션은 동시에 실행되는 반면, 하나의 트랜잭션이 포함하는 작업은 순차적으로 실행되는 것이다.
나머지 두 특성, 일관성/격리성은 DBMS가 제공하는 기능이다. 이를 위해서는 ㉠이 필요하다. ㉠이 보장되지 않는다면 여러 문제가 발생할 수 있다. 4문단에서 마치 나열된 것처럼 보이는 정보는 꽤 많은 인지 스트레스를 우리에게 부여한다. 갱신 분실과 모순된 읽기의 세 유형인 오염된 읽기, 반복불가능 읽기, 팬텀 읽기는 살펴보는 것은 정보량이 많으므로 단기 기억에 부담을 준다. 하지만 출제자가 주목한 것은 part of + cause of에 근거한 추론이다.
개념을 파악하는 것은 본질을 따져본다는 것을 뜻한다. 갱신 분실은 두 트랜잭션이 동일한 데이터를 동시에 갱신할 때 발생할 수 있다. 갱신의 동시성은 갱신 분실의 요건이다. 따라서 트랜잭션의 순차적 실행 효과를 보장하는 직렬화 가능을 실행하면 삼단논법에 따라 갱신 분실 문제가 해소된다고 추론할 수 있다.
또한 part of 관계에 주목하여 모순된 읽기의 세 종류를 다음과 같이 표상화할 수 있다.
- 오염된 읽기는 갱신, 롤백 작업을 갖는다.
- 반복불가능 읽기는 갱신, 완료 작업을 갖는다.
- 팬텀 읽기는 삽입, 조회 작업을 갖는다.
그러므로 만일 갱신이 없다면 오염된 읽기도 없을 것이고, 완료가 없다면 반복불가능 읽기도 없을 것이며, 조회가 없다면 팬텀 읽기도 발생하지 않을 것이다.
한편 잠금의 기본 원리는 PCS에서 P로, 2단계 잠금과 같은 직렬화는 P에 대한 S로 설정된다. 격리성의 수준이 높아질수록 독립성이 강해지지만 동시성은 저하된다. SQL에서 정의하는 4단계 격리성 수준은 오른쪽으로 갈수록 격리성이 강화된다. 그러므로 직렬화 가능 실행은 다른 어떤 이전 단계보다도 독립성이 높지만 동시성은 낮다.
Filtering
- 25번 문항
- ①: 모순된 읽기의 유형에는 오염, 반복불가능, 팬텀이 있다. 이 세 가지 모두 조회작업 이외의 다른 작업을 포함하고 그것들에 의해 발생한다. 그러므로 조회작업으로만 구성하면 문제는 발생하지 않는다.
- ②: 트랜잭선의 두 특성 간 허위적 인과로 보자면 완료 읽기의 격리성 수준이 원자성을 보장하지 않는다. 또한 반복불가능과 팬텀 문제가 발생하는 완료 읽기는 거래가 완료되거나 롤백되어야 하는 원자성을 만족하지 않는다.
- ④: DBMS는 일관성과 격리성을 보장하지만 원자성을 보장하지는 않는다. 제약조건 충족/위배에 관한 것은 일관성에 관한 것이다. 일관성은 SQL에 의해 총족된다.
- 26번 문항
- ⑤: 데이터를 독점적으로 사용하는 기본 방식의 잠금은 완전한 격리성 보장을 저해하며, 이를 위해서는 2단계 잠금과 같은 기법인 직렬화가 필요하다.문제에 등장하는 모든 추론은 트랜잭션에 포함된 작업 요소에서 출발한다. 모순된 읽기는 조회가 아닌 다른 작업들을 포함하므로 조회작업으로 구성된 두 트랜잭션에서는 모순된 읽기가 발생하지 않는다.
- ①: 가장 높은 격리성 수준을 보장하는 직렬화는 데이터의 순차적 실행을 보장한다. 갱신분실이 발생하기 위해서는 동시 갱신이 이루어져야 한다. 그러므로 후건 부정에 의거하여 직렬화에서는 갱신 분실이 발생하지 않는다.
- ②: 격리성이 가장 낮은 미완료 단계에서는 모든 유형의 모순된 읽기가 발생한다.
- ③: 격리성이 낮아질수록 독립성이 낮아진다.
- ⑤: 팬텀읽기는 삽입과 조회 과정이 필요하므로 갱신작업으로만 구성되면 해당 문제가 발생하지 않는다.
- 27번 문항
- ④: <상황2>에서 세 트랜잭션을 실제로 동시에 실행된다. 이것이 헷갈리는 이유는 개념적으로 동시실행이 보장된다는 것과 혼동되기 때문이다.
- ①: 갑의 계좌잔액은 오염된 읽기이지만 을의 계좌잔액은 완료 이후이므로 오염된 읽기가 아니다.
- ②: 오염된 읽기는 완료 단계에서 해결된다.
- ③: <상황1>에서는 오염된 읽기가, <상황2>에서는 반복불가능과 팬텀이 발생한다.
- ⑤: <상황2>에서 문제의 방지를 위해서는 직렬화 수준이 설정되어야 한다. 그러므로 이 경우에 <상황1>에서 오염된 읽기도 발생하지 않는다.