DigdagからPostgreSQLに接続した際にconnectionが枯渇する現象を解決した話

docker-compose上で、Digdagをサーバーモードで起動し、PostgreSQLに接続した際に以下のようなログが多発した。

digdag      | 2021-01-26 23:23:30 +0000: Digdag v0.9.42
digdag      | 2021-01-26 23:23:32 +0000 [INFO] (main): secret encryption engine: disabled
digdag      | 2021-01-26 23:23:32 +0000 [INFO] (main): XNIO version 3.3.6.Final
digdag      | 2021-01-26 23:23:32 +0000 [INFO] (main): XNIO NIO Implementation Version 3.3.6.Final
digdag      | 2021-01-26 23:23:32 +0000 [INFO] (main): Starting server on 0.0.0.0:65432
digdag      | 2021-01-26 23:23:32 +0000 [INFO] (main): Bound on 0.0.0.0:65432 (api)
postgres_1  | 2021-01-26 23:23:32.952 UTC [130] FATAL:  sorry, too many clients already
postgres_1  | 2021-01-26 23:23:33.208 UTC [131] FATAL:  sorry, too many clients already
postgres_1  | 2021-01-26 23:23:33.592 UTC [132] FATAL:  sorry, too many clients already
postgres_1  | 2021-01-26 23:23:34.163 UTC [133] FATAL:  sorry, too many clients already
postgres_1  | 2021-01-26 23:23:35.011 UTC [134] FATAL:  sorry, too many clients already

どうやらDigdagからPostgreSQLに対してのコネクションが多発しているような感じたったのだが、特に理由がわからず。。。

うぁーとか思ってこんなツイートをすると

すかさず@hiroysatoさんが丁寧に教えてくださった!(本当にありがとうございます🙇‍♂️)

コネクション数はデフォルトでCPUコア数 × 32らしく、手元のpcのdocker for macではCPUに4コアを割り当ており、 またPostgreSQLの最大コネクション数は通常でデフォルトが100なっているらしく、それが原因でコネクションが枯渇している感じだった。

www.postgresql.org

解決策

ツイートにもあるが、設定ファイルであるserver.propertiesdatabase.maximumPoolSizeのパラメータを追加して解決した。(今回は32で固定)

docs.digdag.io

サンプル

今回はdocker-composeの上でDigdag、PosgresSQLのサーバーを立てて検証した。 github.com