pgsql 잠 금 표 후 kill 프로 세 스 작업
                                            
 3013 단어  pgsql자물쇠 시계kill 프로 세 스
                    
select * from pg_stat_activity
 
 어떤 시계 가 잠 겼 는 지 의심 되면 다음 sql 을 실행 할 수 있 습 니 다.
select oid from pg_class where relname='table_name'
select pg_cancel_backend('oid ');;
이 sql 은 kill 역할 입 니 다.
추가:PostgreSQL-잠 긴 프로 세 스 를 어떻게 죽 입 니까?
머리말
한 번 의 시스템 교체 후 사용 자 는 시스템 에 성공 적 으로 로그 인 할 수 없다 고 신고 했다.테스트 를 통 해 재현 과 로그 포 지 셔 닝 을 한 결과 사용자 가 ui 에서 일부 조작 을 한 후에 스 택 에 이상 이 발생 하여 데이터 베이스 에 있 는 사용자 로그 인 정보 표 의 데이터 가 잠 겨 있어 서 방출 할 수 없 음 을 발견 했다.이 표 에 저 장 된 것 은 사용자 의 session 정보 입 니 다.
나중에 문 제 를 해 결 했 지만 데이터베이스 에 있 는 이 사용자 로그 인 정보 표 에 잠 겨 있 는 데 이 터 를 풀 수 없 기 때문에 사용자 가 로그 인 에 성공 하지 못 할 것 입 니 다.SQL 을 수 동 으로 뛰 어서 자 물 쇠 를 제거 해 야 합 니 다.
지정 한 프로 세 스 죽 이기
PostgreSQL 은 두 가지 함 수 를 제공 합 니 다:pgcancel_backend()와 pgterminate_backend(),이 두 함수 의 입력 매개 변 수 는 프로 세 스 PID 입 니 다.현재 프로 세 스 PID 를 20407 프로 세 스 로 죽 이려 고 한다 고 가정 하면 사용 방법 은 다음 과 같 습 니 다.
select pg_cancel_backend(20407);
select pg_terminate_backend(20407);
pg_cancel_backend()
배경 에 SIGINT 신 호 를 보 내 서 업 무 를 닫 는 데 사용 합 니 다.이때 session 이 있 고 업무 가 다시 굴 러 갑 니 다.
pg_terminate_backend()
배경 에 SIGTERM 신 호 를 보 내 사 무 를 닫 는 데 사용 합 니 다.이때 session 도 닫 히 고 트 랜 잭 션 이 다시 굴 러 갑 니 다.
그렇다면 어떤 시계,어떤 프로 세 스 가 잠 겨 있 는 지 어떻게 압 니까?다음 SQL 에서 찾 을 수 있 습 니 다:
select * from pg_locks a
join pg_class b on a.relation = b.oid
join pg_stat_activity c on a.pid = c.pid
where a.mode like '%ExclusiveLock%';지정 한 테이블 의 잠 금 프로 세 스 를 죽 입 니 다.
select pg_cancel_backend(a.pid) from pg_locks a
join pg_class b on a.relation = b.oid
join pg_stat_activity c on a.pid = c.pid
where b.relname ilike '  ' 
and a.mode like '%ExclusiveLock%';
select pg_terminate_backend(a.pid) from pg_locks a
join pg_class b on a.relation = b.oid
join pg_stat_activity c on a.pid = c.pid
where b.relname ilike '  ' 
and a.mode like '%ExclusiveLock%';이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.