본문 바로가기
DB

[postgreSql]DB Table lock 테이블 락 걸렸을 때 확인 및 킬(kill)

by DDveloper 2022. 11. 11.

운영업무 중 로그 테이블에 추가로 데이터를 관리하기 위해 2가지 컬럼 추가 작업이 필요했다.

테스트 서버에서 먼저 단순 컬럼 추가 명령어로 컬럼 2개를 추가 후 테스트 서버에서 잘 사용확인 했는데,,

 

운영에서 퇴근시간에 맞춰 6시에 컬럼추가를 하려니 DB테이블(로그 테이블)이 락걸렸다..

로그테이블은 시스템 기능의 많은 부분에 연관이 있어서 시스템 전체가 멈춰버렸다.

인프라팀도 퇴근을 한 상태라 구글에서 찾아본 뒤 인프라팀의 유선도움을 받아 해당 데이터 조회 후 킬을 진행했다.

 

### lock 테이블 조회

 

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

 

** 이건 별도로 보기 편하게 조건 추가
[where wait_event_type = 'Lock' order by query_start desc;]

 

조회 후 pid (프로세스id) 찾아서

SELECT pg_cancel_backend([pid]); 를 실행 했더니 lock이 풀리고 시스템도 정상으로 돌아왔다
(SELECT pg_terminate_backend([pid]) FROM pg_stat_activity 는 해당 PID와 연계된 모든 상위 쿼리 프로세스를 종료)

 

그냥 컬럼추가라고 생각해서 단순 작업이라고 생각했었는데 물려있는 기능들이 많다보니,, 사용중에 락이 걸려버린 것 같았다.

다음부터는 단순하게 생각할 것이 아닌 더 신중히 판단해야 한다는 중요성을 느꼈다..!

 

추후에 인프라팀 요청 후 정기 날짜를 잡아 서비스를 내린다음 컬럼추가 하여 정상 작업 진행완료 하였다.

'DB' 카테고리의 다른 글

UNION ALL vs 서브쿼리 .. DB 속도 확인  (0) 2022.12.05

댓글