SMALL
Deadlock
트랜잭션 교착상태
트랜잭션들이 서로가 잡고있는 Lock을 얻으려고 할 때, DeadLock이 발생
서로가 쥐고 있는 Lock을 얻어야지만, 트랜잭션이 끝날 수 있어 영원히 Transaction이 안끝나게 됨
그래서 트랜잭션 짤 때 DeadLock 안걸리게 순서를 잘 구성해야 함
Deadlock 테이블 확인
SELECT relation::regclass, * FROM pg_locks WHERE NOT granted;
Lock
Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법
Lock의 종류로는 공유(Shared) Lock과 베타(Exclusive) Lock이 있음
1. Shared Lock(공유 Lock 또는 Read Lock): 데이터를 읽을 때 사용
내가 보고 있는 데이터는 다른 사용자가 볼 수 있지만, 변경은 불가
2) Exclusive Lock(배타적 Lock 또는 Write lock) : 데이터를 변경할 때 사용
해당 Lock이 해제되기 전까지는, 다른 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;
Lock 쿼리 kill
select pg_cancel_backend(pid);
SELECT pg_terminate_backend(pid) FROM pg_stat_activity; #연계된 상위 쿼리까지 모두 중지
select * from pg_stat_activity; # 현재 실행중인 SQL
'Database & Bigdata > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 서비스 운영을 위한 Postgresql.conf 기본 parameters 셋팅 (0) | 2022.11.01 |
---|---|
[PostgreSQL] WAL 이란 ? / WAL 관련 파라미터 (0) | 2022.07.05 |
[PostgreSQL] DB LOG CHECK : ERROR 23505, 22021,57014,21000 / FATAL : 25P03 (0) | 2022.05.26 |
[PostgreSQL] Streaming Replication / Logical Replication (0) | 2022.05.23 |
[PostgreSQL] Oracle과 PostgreSQL의 database 기본 구조 차이 (0) | 2022.05.17 |
댓글