데이터베이스 Table Lock이란?

테이블 Lock

데이터베이스에서 락(Lock)은 공유 자원에 대한 동시 액세스를 제어하는 메커니즘입니다. 테이블에 락이 걸리면 그 테이블에 대해서는 동시 액세스가 불가합니다. 테이블 락은 거의 모든 DBMS에서 제공하는 기능입니다.

 

동시에 같은 테이블을 수정하려고 할 때, 하나의 트랜잭션이 끝나지 않은 상태에서 다른 트랜잭션이 동일한 데이터에 접근하려 할 때 데이터베이스에 락이 발생할 수 있습니다. 트랜잭션은 데이터베이스에서 한 번에 수행되어야 하는 연산의 단위를 말합니다.

 

그렇다고 테이블 락이 나쁜 건 아닙니다. 오히려 데이터베이스의 데이터 일관성을 보장하기 위해 발동하는 기능입니다.

 

예시)

예를 들어 orders라는 주문 정보를 저장하는 테이블이 있습니다. 트랜잭션 1이 시작되며 새로운 주문을 추가하는 아래의 INSERT 문이 시작됩니다. 

INSERT INTO orders (id, product, quantity) VALUES (1, 'apple', 10);

 

INSERT 문을 실행하는 동안 orders 테이블에는 행 레벨의 락 또는 테이블 락이 걸리게 됩니다. 이때 트랜잭션 2가 시작되었고 orders 테이블에서 주문 정보를 업데이트하는 UPDATE 문을 실행하려고 합니다. 그러나 트랜잭션 1이 아직 orders 테이블의 락을 보유하고 있기 때문에, 트랜잭션 2는 테이블 락이 해제될 때까지 대기해야 합니다. 이러한 상황이 테이블 락입니다.

UPDATE orders SET quantity = 20 WHERE id = 1;

 

트랜잭션 1이 종료되고 COMMIT을 실행하면, orders 테이블의 락이 해제되고, 트랜잭션 2는 이제 orders 테이블을 업데이트할 수 있게 됩니다.

COMMIT;

 

이처럼 테이블 락은 데이터의 일관성을 보장하기 위해 사용됩니다. 데이터베이스의 동시성 제어를 담당하는 중요한 부분입니다.

반응형

댓글

Designed by JB FACTORY