PostgreSQL - Solved - FATAL: remaining connection slots are reserved for non-replication superuser connections
PostgreSQL が次のエラーを出し始めたので、 プロセスを削除して急場を乗り切りました。
環境
PostgreSQL 9.5.10
現象
psql で接続を試みると、次のエラーが発生していました。
psql: error: could not connect to server: FATAL: remaining connection slots are reserved for non-replication superuser connections
やったこと
ps -ef
をみると、 PostgreSQL 関連 のプロセスが大量に動いているのがわかる。
サーバにSSHでログインして、 postgres ユーザ でDBに接続。 問題なく接続できた。
動いている PostgreSQL のプロセスの確認。 SQLはインターネットでとりあえず見つけたものを使った。
SELECT user, pid, client_addr, waiting, query, query_start, NOW() - query_start AS elapsed
FROM pg_stat_activity
WHERE query != '<IDLE>' order by query_start;
SELECT
procpid,
start,
now() - start AS lap,
current_query
FROM
(SELECT
backendid,
pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS start,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS S
) AS S
WHERE
current_query <> ''
ORDER BY
lap DESC;
問題なさそうなプロセスから消していった。
消すときは次の2つのSQLコマンドが使えるが、 pg_cancel_backend
だと多分キャンセルOKな状態のものしかキャンセルできない。
pg_terminate_backend
を使うこととなった。
SELECT pg_cancel_backend(process_id);
SELECT pg_terminate_backend(process_id);
いくつか消したところでDBに接続できるようになった。
優先的に削除したのは、2番目のSQLで次のように START TRANSACTION;
と表示されていたもの。
たぶん START TRANSACTION;
の実行で止まっていたとしたら、 まだなにも変更は行われていないだろうと。
23624 | 2020-06-15 20:30:03.396778+09 | 13:20:48.396889 | START TRANSACTION;
24164 | 2020-06-15 21:00:03.503046+09 | 12:50:48.290621 | START TRANSACTION;
24165 | 2020-06-15 21:00:03.518704+09 | 12:50:48.274963 | START TRANSACTION;
24167 | 2020-06-15 21:00:03.522438+09 | 12:50:48.271229 | START TRANSACTION;
24166 | 2020-06-15 21:00:03.523716+09 | 12:50:48.269951 | START TRANSACTION;
24694 | 2020-06-15 21:30:02.70439+09 | 12:20:49.089277 | START TRANSACTION;
24695 | 2020-06-15 21:30:02.720112+09 | 12:20:49.073555 | START TRANSACTION;
24696 | 2020-06-15 21:30:02.725209+09 | 12:20:49.068458 | START TRANSACTION;
24697 | 2020-06-15 21:30:02.728767+09 | 12:20:49.0649 | START TRANSACTION;
25320 | 2020-06-15 22:00:02.854174+09 | 11:50:48.939493 | START TRANSACTION;
26318 | 2020-06-15 23:00:03.151547+09 | 10:50:48.64212 | START TRANSACTION;
26320 | 2020-06-15 23:00:03.169473+09 | 10:50:48.624194 | START TRANSACTION;
26319 | 2020-06-15 23:00:03.170017+09 | 10:50:48.62365 | START TRANSACTION;
26321 | 2020-06-15 23:00:03.172524+09 | 10:50:48.621143 | START TRANSACTION;