-
2PL (Two Phase Locking)을 이용하여 B+TREE 인덱스에 접근하는 것은 최악이라는 것을 알게 되었는데, 그 이유는 인덱스에 접근할 때마다 트리의 루트 노드에 접근할기 때문이다.
-
따라서 인덱스에서는 락킹을 사용하지 않고 래칭을 사용한다는 것을 알게 되었다. 락킹과 래칭의 차이점에 대해서 알고 싶어서 조사를 하였다.
-
위는 참고 문헌에 나와있는 서베이에 있는 내용이다. 자세히 알고 싶으면 아래 링크를 참조해서 직접 문서를 읽는 편이 도움이 될 것 이다.
-
위의 내용을 참고한 결과 락킹은 데이터베이스 애플리케이션 내에서 트랜잭션 단위로 데이터 정합성을 보장하기 위해서 하는 것이고, 래치는 시스템 상에서 여러 스레드가 동시에 자원에 접근할 수 없도록 보장하는 것이다.
-
락은 내부적으로 대기 큐 및 그래프를 가지고 있어 데드락을 감지 및 해결할 수 있고(대기 큐 분석 및 타임 아웃), 락 매니저에 의해서 관리된다. 그리고 다양한 락 모드가 있다. (공유 락, 배타 락, 업데이트 락, 인텐드 락…)
-
래치는 시스템 상에서 임계 영역에 여러 스레드가 접근하지 못하도록 보장하는 것이다. 락이 데이터베이스 콘텐츠(테이블 데이터, 인덱스, 스키마…)를 보호하는 것에 비해서 래치는 인메모리에 있는 자료 구조를 보호한다.
-
나중에 시간이 있을 때 아래 서베이를 자세히 공부하는 것도 좋을 것 같다. 락킹과 래치에 대해서 많은 공부를 할 수 있을 것 이다.
참고 문헌
-
What is the difference between a lock and a latch in the context of concurrent access to a database?