Was soll ich tun, wenn ich eine lange laufende Postgres-Abfrage habe und reguläres "kill [pid]" nicht funktioniert und pg_cancel_backend nicht funktioniert?
Was soll ich tun, wenn ich eine lange laufende Postgres-Abfrage habe und reguläres "kill [pid]" nicht funktioniert und pg_cancel_backend nicht funktioniert?
Sie sollten niemals einen Postgres-Prozess beenden, es sei denn, Ihr Ziel ist es, den gesamten Server gewaltsam herunterzufahren. Sie können jeden Prozess beenden, der nicht auf einen Aufruf von pg_cancel_backend () aus der Shell mit reagiert
kill <pid>
dh nicht -9. Beachten Sie, dass ich einige Male gesehen habe, wo selbst das nicht funktioniert hat, weil der Prozess in einer Schleife auf Daten in einer Netzwerkverbindung gewartet hat. Wenn ich mich richtig erinnere, hat sich das Beenden des Client-Prozesses darum gekümmert.
http://www.postgresql.org/docs/current/static/server-shutdown.html
pg_cancel_backend entspricht dem Senden von SIGINT an den Prozess.
pg_terminate_backend ebenfalls für SIGTERM, aber wenn pg_cancel_backend nicht funktioniert, verstehe ich nicht, warum pg_terminate_backend dies tun würde.
Wenn Sie diese Optionen ausprobiert haben, können Sie SIGQUIT ausprobieren. Die Dokumente sagen: " Dies wird nur in Notfällen empfohlen. "
(Wenn Sie Ihre Daten hassen und hoffen, dass sie sterben, können Sie SIGKILL verwenden. Aber ich würde nicht.)
Sie können entweder kill
direkt oder verwenden pg_ctl kill
.
Wenn Sie eine aktuelle Postgres haben , können Sie versuchen ,
pg_terminate_backend
statt.quelle
bribles ist in seiner obigen Aussage richtig ...
WENN Sie versuchen, auf
SHUTDOWN
den Server, für mich jedoch:Ich versuche nur, pensionierte Datenbanken / Schemas zu entfernen, die immer noch eine Verbindung haben, die sie nicht loslassen.
Um Ihre Frage zu beantworten,
NICHT IM ZUSAMMENHANG mit dem Herunterfahren des Servers in irgendeiner Weise.
Ich habe auch dieses Verhalten gesehen,
pg_cancel_backend()
nicht zu arbeiten. Und wollte meine Arbeitslösung teilen.Ich habe bisher kein Problem mit einem "Datenverlust" gesehen.
Auch hier versuche ich nicht,
Active
Abfragen zu beenden.Hoffe das hilft. =)
~ Jay
quelle