2021. 1. 8. 17:31ㆍ프로그래밍-Science/데이터베이스
DB의 concurrency를 컨트롤하는 대표적인 방법이 Lock이다.
이는 하나의 트랜젝션이 실행되는 동안, 특정 데이터 항목에 대해 다른 트랜젝션이 접근하지 못하게 만드는 것.
- Transaction
DB는 기본적으로 All or Nothing 방식을 취한다. 즉, DB에 Insert되는 상황에 대해서는 모두성공 또는 모두실패라는 결과 중 하나만 리턴한다는 것이다. 이 전략을 위해 취하는 것이 트랜젝션이다. 얘는 더이상 나누어지지 않는 하나의 단위다.
트랜젝션은 조금이라도 오류가 발생하면 모두 Rollback함으로써 Nothing의 결과를 리턴한다.
이 트랜젝션은 Atomicity, Consistency, Isolation, Durability의 특징을 갖는다.
Atomicity은 All or Nothing을 의미하고,
Consistency는 트랜잭션 실행 후 DB상태에 모순이 없어야됨을
Isolation은 트랜젝션 중간에 다른 트랜잭션이 접근할 수 없음을,
Durability는 실행이 완료되면 DB에 결과가 영구저장됨을 말한다.
이 중, Lock과 관련이 깊은 Isolation에 대해 생각해보자
저 네가지 항목은 사용자가 설정함에 따라 강하게도, 그리고 약하게도 설정할 수 있다
이러한 상황을 방지하기 위해 Lock을 사용한다. Lock은 DB단위든, 로우 단위든, 테이블 단위든 다양한 범위에 대해 걸 수 있다.(보통 테이블Lock은 DDL Lock이라고 한다) 얘는 두 가지로 나눌 수 있다.
Shared Lock: Read Lock. 즉 데이터를 Read할 때 사용된다. Read과정에서 데이터가 변하면 안되므로, 읽는건 허용하되 쓰는 것을 잠근다. Exclusive Lock과 동시에 적용할 수 없다.
Exclusive Lock: Write Lock. Update시 사용하고, 다른 트랜젝션이 접근할 수 없다. 데이터를 쓰는 과정에서는 단 한개의 트랜젝션만 적용되어야 한다. 즉, 읽기, 쓰기 모두 안되게 잠근다.
대표적인 Lock문제가 Dead Lock이다
한번의 트랜젝션에 두 자원에 대한 Update와 Read가 있는데, Read대상이 서로가 Update하는 대상이라면, 둘 다 wait하느라 commit이 이루어지지 않는다.
'프로그래밍-Science > 데이터베이스' 카테고리의 다른 글
[개념정리] DLL (0) | 2021.01.14 |
---|