반응형
AccessShareLock 이란?
Oracle에서는 SELECT 동안 락을 잡지 않는다. 다만 SELECT 되는 동안 해당 테이블의 구조(컬럼변경, DDL 등) 를 바꾸지 못하도록 해당 테이블에 TM LOCK 을 거는데 딱히 성능에 지장을 주는 Lock이 아니다.
PostgreSQL에서 TM LOCK에 해당하는 것이 AccessShareLock 이다.
성능에 지장을 주는 Lock이 아니기 때문에 크게 상관 안써도 되지만, 테스트 과정에서 DDL변경이 Block되기 때문에 Lock을 해제해줘야 한다.
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;
해당 SQL을 실행하면 Lock된 객체들을 조회할 수 있다. 조회된 Lock같은 경우 아래의 구문을 통해 쉽게 해제 할 수 있다.
Lock 해제
SELECT pg_cancel_backend(PID);
위의 방법으로 해결이 안될경우, PID에 연관된 상위Query들이 존재한다고 볼 수 있다.
실행중인 Query 상태 조회
select * from pg_stat_activity;
Lock 과 관련된 상위 Query까지 해제
SELECT pg_terminate_backend(PID)
FROM pg_stat_activity ;
위의 PG_CANCEL_BACKEND 경우 해당 PID만 중지시키고, PG_TERMINATE_BACKEND의 경우 PID와 연관된 모든 상위 Query도 같이 중지 시킨다.
pg_stat_activity조회를 통해 PID에 얽혀있는 쿼리들을 해제해주면 알아서 Lock해제되는 걸 볼 수 있다.
따라서, 위의 두개의 구문을 통해 Lock걸린 프로세스를 종료시키면 된다.
참고 ( PostgreSQL에 대한 모든 Lock이 정리되어 있음)
https://medium.com/29cm/db-postgresql-lock-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-57d37ebe057
반응형
'DataBase > 🐘PostgreSQL' 카테고리의 다른 글
PostgreSql에서 orafce install 설치하기 (0) | 2022.09.13 |
---|---|
CentOS Stream8 에서 Postgresql14 설치 및 외부 접속 셋팅 (0) | 2022.08.24 |
Postgresql에서 AES256 암호화 후 Base64 Encoding 하기 (0) | 2022.07.29 |
Mybatis에서 PostgreSQL 프로시저 Cursor 값 받기 (0) | 2022.05.21 |
댓글