분류 전체보기

Database

데이터베이스 Lock

Enqueue Lock Enqueue는 공유 리소스에 대한 액세스를 관리하는 Lock 메커니즘이다. Enqueue에 의해 보호되는 공유 리소스로는 테이블, 트랜잭션, 테이블스페이스, 시퀀스, Temp 세그먼트 등이 있다. Enqueue Lock은 래치와 달리 순서가 보장되는 Queue를 사용한다. Enqueue 리소스는 소유자, 대기자, 목록을 관리할 수 있는 구조체를 말한다. 소유가자 Exclusive 모드일 때는 한 순간에 하나의 세션만 Lock을 획득할 수 있지만, Shared 모드일 때는 여러 세션이 동시에 Lock을 획득할 수 있다. TX Lock(트랜잭션 Lock) 트랜잭션이 시작하면 Undo 세그먼트 헤더에 위치한 트랜잭션 테이블로부터 슬롯을 하나 할당받는다. 다른 트랜잭션이 Consiste..

Database

Lock Escalation

Lock Escalation 로우 레벨 Lock이 페이지, 익스텐트, 테이블 레벨 Lock으로 확장되는 것을 말한다. Lock 매니저로 Lock을 관리하는 DBMS에서 메모리 자원의 한계를 극복하기 위해 구현된 기능인데, 낮은 레벨의 Lock을 사용할수록 동시성이 좋지만, 관리해야 할 Lock의 개수가 증가하여 관리해야할 메모리가 늘어나게 되기 때문에 Lock 레벨을 확장하는 것이다. 하지만, 수많은 레코드를 한꺼번에 잠그기 때문에 동시성이 나빠진다. 오라클의 경우, Lock을 로우 속성으로 관리하기에 이러한 현상이 발생하지 않는다.

Database

오라클 MVCC 패턴

MVCC란? 데이터를 변경할 때마다 그 변경사항을 undo 영역에 저장하며, 이후 데이터를 읽다가 쿼리 시작 시점 이후에 변경된 값 발견 시 undo 영역에 저장하였던 정보를 이용하여 쿼리 시작 시점의 일관성 있는 버전(CR Copy)를 생성하고 읽는다. MVCC는 문장수준과 트랜잭션 수준의 읽기 일관성이 존재한다. 문장수준 읽기 일관성 문장수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 단일 SQL문 내에서 일관성 있게 값을 읽는 것을 이야기함. 일관성의 기준은 쿼리를 시작하였을 때 값을 이야기함. 트랜잭션 수준 읽기 일관성 트랜잭션 수준 읽기 일관성은, 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 트랜잭션 내에서 일관성 있게 값을 읽는 것이다...

카테고리 없음

비관성 동시성 제어 vs 낙관성 동시성 제어

비관성 동시성 제어 vs 낙관성 동시성 제어 동시성 제어 DBMS가 다수의 사용자를 가정하여, 동시에 다중 트랜잭션의 상호 간섭 작용에서 DB를 보호하는 것을 이야기한다. 동시성 제어를 위해 모든 DBMS가 공통적으로 Lock 기능을 제공한다. 비관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정할 것이라 가정하고 데이터를 읽는 시점에 Lock을 걸고 트랜잭션이 완료될 때까지 유지하는 것. select 시점에 Lock을 거므로 자칫 시스템 동시성을 심각학[ 떨어뜨릴 우려가 있음. wait, 또는 nowait 옵션을 함께 사용하는 것이 바람직 낙관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라 가정하고 데이터를 읽는 때는 Lock을 설정하지 않음. 대신 수정 시점에 다른 사용자에 ..

Database

select for update 문

Select for update 한 트랜잭션 내에서 나중에 변경할 목적으로 데이터를 읽을 때 사용한다. 기본적으로 실행하면 조회할 데이터의 Lock을 얻지 못할 경우 얻을 때까지 무작정 기다린다. 선택된 레코드들에 대해 베타적인 Lock을 커밋할 때까지 적용한다. 데이터의 일관성을 보장하기 위해 사용한다. 예시 declare l_sal number; begin select sal into l_sal from emp where empno = 7900 for update; ... update emp set sal = l_sal + 100 where empno = 7900; commit; end; nowait select for update 뒤에 nowait를 지정하면 select할 데이터의 Lock을 얻을 ..

Database

데이터베이스 교착상태

데이터베이스 교착상태(DeadLock) 교착상태 트랜잭션 1이 쿼리 1을 수행하여 d2을 작업한 후, 쿼리 2를 통해 d2 작업하려 할 때 트랜잭션 2의 쿼리 1이 d2를 작업하고 쿼리 2가 d1을 작업하려하면 서로 자원을 요청하였으나, 트랜잭션 1은 d2의 lock을 할당받지 못해 d1의 lock을 해제하지 않고, 트랜잭션2는 d1의 lock을 받지 못하여 d2의 lock을 해제할 수 없을 때 나타난다. 교착상태 해소 오라클의 경우, 교착상태 발생 시 dbms가 둘 중 한 세션에 에러를 발생시킴으로써 교착상태를 해소시킨다. 예방 방법 SQL 튜닝을 통해 I/O를 줄임으로써 수행 시간을 단축하면, Lock 점유 시간이 줄면서 Lock 경합과 교착상태 발생 가능성도 줄어든다.

xlwdn98767
'분류 전체보기' 카테고리의 글 목록 (13 Page)