偶爾,即使我在pgAdmin中「停止」它後,查詢仍將繼續運行,請運行pg_cancel_backend
,pg_terminate_backend
並從命令行中終止。我發現的唯一選擇是完全停止並重新啓動postgres服務(通常使用pg_ctl -m immediate
)。我目前使用Postgres 9.1。當pg_cancel_backend不起作用時,我該如何終止進程?
是否有其他選項可以完全終止正在運行的進程?
偶爾,即使我在pgAdmin中「停止」它後,查詢仍將繼續運行,請運行pg_cancel_backend
,pg_terminate_backend
並從命令行中終止。我發現的唯一選擇是完全停止並重新啓動postgres服務(通常使用pg_ctl -m immediate
)。我目前使用Postgres 9.1。當pg_cancel_backend不起作用時,我該如何終止進程?
是否有其他選項可以完全終止正在運行的進程?
這不應該真的發生。後端在做什麼問題?檢查:
ps -C postgres -o pid,ppid,stat,start,time,%cpu,%mem,blocked,ignored,wchan:80,cmd
替換-C postgres
與-p the_pid
如果你知道它。確保包含寬chan
行後顯示的進程名稱。用整行更新你的答案。
您可能還想從後端獲得回溯,看看它在做什麼。你可能是在給定的kill
Linux或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。
回溯可能很長,因此請考慮將它放在pastebin網站上,而不是直接放到您的問題中,然後在此處鏈接。
重訪一下,有些地方PostgreSQL後端在沒有CHECK_FOR_INTERRUPTS
的地方工作了一段時間。儘可能避免這些補丁,但仍然會發生。
如果您發現這種情況,請舉報。
你不能幹淨地停止後端,直到它檢查中斷,所以你必須等待。或者您可以重新啓動整個數據庫服務器。如果你使用(例如)kill -9
來強制殺死感興趣的後端,PostgreSQL將把shared_buffers
視爲可能損壞,並立即強制重啓,斷開所有當前會話。所以你可以使用立即關機。