PostgreSQL AccessShareLock 이해 및 해제 가이드
AccessShareLock이란?
- Oracle의 TM LOCK과 유사: 데이터를 읽는 동안(SELECT) 테이블 구조 변경을 막기 위해 걸리는 락입니다.
- 성능에 미치는 영향: 일반적으로 성능 저하를 유발하지 않지만, 테이블 구조 변경 작업 시 방해가 될 수 있습니다.
- PostgreSQL에서의 역할: 데이터의 일관성 유지에 기여합니다.
Lock 조회 및 해제
1. 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;
relname
: 락이 걸린 테이블 이름locktype
: 락 종류 (AccessShareLock 등)pid
: 프로세스 IDmode
: 락 모드
2. Lock 해제:
- 단일 프로세스 종료:
SELECT pg_cancel_backend(PID);
- 해당 PID의 프로세스만 종료합니다.
- 상위 쿼리까지 종료:
SELECT pg_terminate_backend(PID) FROM pg_stat_activity;
- PID와 관련된 모든 상위 쿼리까지 종료합니다.
3. 실행 중인 쿼리 상태 조회:
select * from pg_stat_activity;
주의 사항
- pg_terminate_backend는 강제 종료이므로 데이터 손실 가능성이 있습니다. 신중하게 사용해야 합니다.
- 락 해제 전 반드시 원인을 파악하고 해결하는 것이 좋습니다. 락이 자주 발생하는 경우, 쿼리 최적화나 데이터베이스 설정 변경이 필요할 수 있습니다.
요약
PostgreSQL의 AccessShareLock은 데이터 일관성을 위해 필요한 락입니다. 일반적으로 문제가 되지 않지만, 테이블 구조 변경 등 특정 상황에서 방해가 될 수 있습니다. 위의 SQL 쿼리를 사용하여 Lock을 조회하고 해제할 수 있으며, pg_terminate_backend
를 사용할 때는 주의가 필요합니다.
더 자세한 정보는 PostgreSQL 공식 문서를 참고하세요.
핵심:
- AccessShareLock은 SELECT 시 걸리는 락으로, 일반적으로 성능에 영향을 주지 않습니다.
- Lock을 조회하고 해제하는 방법을 알아두면 문제 해결에 도움이 됩니다.
pg_terminate_backend
는 강력한 명령어이므로 신중하게 사용해야 합니다.
'Database' 카테고리의 다른 글
[PostgreSQL] 사용중인 function의 정의 내용을 특정 문자열 검색 하는 방법 (0) | 2024.11.15 |
---|---|
[DB] 특정 기간중 DB CPU 부하가 높은 SQL 찾기 (0) | 2023.04.20 |
[DB] Oracle 쿼리 튜닝을 위한 쿼리 분석 방법 (0) | 2023.04.13 |
[SQL] 오라클 조회 쿼리 성능 개선을 위한 정리 - 1 (0) | 2023.04.12 |
락 걸린 테이블 확인 및 락 해제 (0) | 2022.02.16 |