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: 프로세스 ID
  • mode: 락 모드

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는 강력한 명령어이므로 신중하게 사용해야 합니다.
728x90
반응형

+ Recent posts