Post

transaction(4)

들어가기에 앞서

txn을 postgresql에서 사용하는 방법을 알았습니다. txn의 ACID에서 I에 해당하는 isolation level에 대해 알아보겠습니다.

isolation level

isolation level은 제가 지정할 수 있다고 transaction(2)에서 이야기했습니다. 링크 : https://amm0124.github.io/posts/txn2/
지정하는 이유는 이를 지정함으로, 성능 향상을 도모할 수 있기 때문입니다. 왜냐하면 하나의 공유 자원에 대해 단 하나의 txn만 허용한다면, 사실 병렬(parallelize)적인 txn처리가 아닌, 직렬적인(serialize)처리기 때문입니다. 이는 하나의 공유자원에 하나의 txn만 허용하므로, 안정적이지만, 굉장히 느려진다는 단점이 있습니다. 따라서 sql에선 isolation level을 지정함으로, 속도의 향상을 도모합니다.
즉, ACID를 지키려면 serialize해야 하지만, 이는 성능 저하를 야기하므로 적절히 isolation level을 상황에 맞게 사용하자는 것이, 잘 하는 database 개발자의 특성이 되는 것이죠.

Transaction Inconsistencies

어떤 query에서 똑같은 값을 select했는데, 다른 값이 나오면 안됨을 우리 모두가 압니다. 이것과 유사한 문제들을 Transaction Inconsistencies라고 합니다. 4가지 문제가 있습니다.

Dirty read

한국어로 직역하면 더럽게 읽기라는 의미가 되겠네요. 이는 read-write conflict라고도 표현할 수 있습니다. 만약 1번이 어떤 데이터를 write하고 있는 도중, 2번이 데이터를 읽으려고 할 때가 바로 dirty read입니다. 아직 다 쓰지 못했으므로 없는 데이터라고 나올 것입니다.

이를 relation algebra로 쓰면, w1(A)r2(A)w1(A)라고 쓸 수 있습니다. w1(A)중 r2(A)가 난입했다고 볼 수 있습니다.

Non-repeatable read

isolation level을 아무렇게나 지정하면 안됩니다. 왜냐하면 이는 txn을 하는 이유를 사라지게 만들기 때문입니다. isolation level에는

This post is licensed under CC BY 4.0 by the author.