2012-09-19 1 views
1

가끔씩 쿼리가 pgAdmin에서 중지 된 후에도 계속 실행됩니다. pg_cancel_backend, pg_terminate_backend을 실행하고 명령 줄에서 종료하십시오. 내가 찾은 유일한 방법은 postgres 서비스를 완전히 중지하고 다시 시작하는 것입니다 (일반적으로 pg_ctl -m immediate 사용). 현재 Postgres 9.1을 사용 중입니다.pg_cancel_backend가 작동하지 않으면 어떻게 프로세스를 종료해야합니까?

실행중인 프로세스를 완전히 종료하는 다른 옵션이 있습니까?

답변

3

이것은 실제로 일어나지 않아야합니다. 백엔드가 겪고있는 문제점은 무엇입니까? 확인 : 당신이 그것을 알고있는 경우

ps -C postgres -o pid,ppid,stat,start,time,%cpu,%mem,blocked,ignored,wchan:80,cmd 

-p the_pid으로 -C postgres 교체. 넓은 chan 행 뒤에 나타나는 프로세스 이름을 포함시켜야합니다. 전체 회선으로 답변을 업데이트하십시오.

백엔드에서 백 트레이스를 얻는 것이 좋습니다. 당신은 kill을 부여 리눅스 나 BSD에 아마, 그래서 시도 :

gdb -p the_pid 
(gdb) bt 
... blah blah copy this blah ... 
(gdb) q 

예 :

gdb -p 914 
......blah blah ........ 
(gdb) bt 
#0 0x0000003c31ceacc3 in __select_nocancel() from /lib64/libc.so.6 
#1 0x00000000005f73b6 in ??() 
#2 0x00000000005f7c36 in SysLogger_Start() 
#3 0x00000000005f60b0 in PostmasterMain() 
#4 0x0000000000457039 in main() 
(gdb) q 
A debugging session is active. 

     Inferior 1 [process 914] will be detached. 

Quit anyway? (y or n) y 
Detaching from program: /usr/bin/postgres, process 914 

가능하다면 첫 번째 심볼 패키지를 디버깅 설치합니다. 내 컴퓨터에서 Pg 9.1을 사용하지 않았으므로 위의 백 트레이스는 그리 유용하지 않습니다. the Pg wiki article을 참조하십시오.

백 트레이스는 매우 길 수 있으므로 직접 붙여서는 안되며 여기에 링크하면됩니다.

1

이 부분을 다시 살펴보면 PostgreSQL 백엔드가 얼마 동안 CHECK_FOR_INTERRUPTS이없는 작업을하고있는 곳이 있습니다. 이러한 패치는 가능하면 피할 수 있지만 여전히 발생합니다.

그러한 사례를 발견하면 신고하십시오.

인터럽트가 확인 될 때까지 백엔드를 완전히 멈출 수 없으므로 기다려야합니다. 또는 전체 데이터베이스 서버를 다시 시작할 수 있습니다. 관심있는 백엔드를 (예 : kill -9) 죽이려고하면 PostgreSQL은 shared_buffers을 잠재적으로 손상된 것으로 간주하고 즉시 다시 시작하여 모든 현재 세션의 연결을 끊습니다. 따라서 즉시 종료를 대신 사용할 수도 있습니다.

관련 문제