본문 바로가기
백엔드/DB

postgresql 테이블 lock 조회 및 lock 해제

by 작은소행성 2021. 11. 11.

 

Lock 이란 트랜잭션 처리의 순차성을 보장하기 위한 방법이다. 

Lock 의 종류에도 공유 Lock 과 베타 Lock 이 있다. 

공유 Lock 은 데이터를 읽을 때 사용되어지는  Lock 으로 하나의 데이터를 읽는 것은 여러 사용자가 동시에 할 수 있다. 

베타 Lock은 데이터를 변경하고자 할 때 사용되며 트랜잭션이 완료될 때까지 유지된다. 

베타 Lock 은 락이 해제될 때까지 다른 트랜잭션은 해당 리소스에 접근할 수 없는 것이다. 

 

나의 경우 베타 락이 걸려있는 것 같았다. 

아래 내용을 락을 해제하고 트랜잭션을 다시 사용할 수 있도록 하는 방법이다. 

DB 는 Postgresql을 사용했다. 

 

 

 

현재 수행중인 SQL 전체 조회

select datname, pid, usename, application_name, client_addr, client_port, backend_start, query_start, wait_event_type, state, backend_xmin query from pg_stat_activity;

 

 

LOCK 걸린 테이블 확인

 

SELECT t.relname, l.locktype, page, virtualtransaction, pid, mode, granted FROM pg_locks l, pg_stat_all_tables t WHERE l.relation = t.relid ORDER BY relation ASC;

기본적으로 대부분의 lock 테이블은 괜찮으나 RowExclusiveLock 이 검색된다면 해당 테이블에 접근이 지연되어 다른 쿼리에도 영향을 미칠 수 있으므로 반드시 잡고있는 트랜잭션이나 서버 상태 등을 점검하여 lock을 해제 해 주는 작업이 필요하다.

 

lock 해제

select pg_cancel_backend(pid);

 

반응형