あなたは一般的に正しい方向に進んでおり、あなたの分析は正確に見えます。いくつかのコメント:
オプション2(キープアライブを無効にする)は、切断されたNpgsqlのプール内のアイドル状態の接続を削除するのに役立ちます。あなたが書いたように、あなたのアプリケーションはまだいくつかの失敗をします(いくつかの悪いアイドル接続が時間内に削除されないかもしれないので)。これがさらなる問題を引き起こすと考える特別な理由はありません-これはオンにするのにかなり安全なはずです。
オプション3は、データベース接続が必要になるたびにpgbouncerへのTCP接続を確立する必要があるため、perfにとって確かに問題があります。また、接続の使用中にpgbouncerがドロップアウトする可能性があるため、100%のフェイルプルーフメカニズムは提供されません。
結局のところ、任意のネットワーク/サーバーの障害に直面した場合の回復力について質問しているのですが、これを実現するのは簡単なことではありません。これに対処するための100%信頼できる唯一の方法は、一時的な例外が発生したときに操作を再試行する専用レイヤーを介したアプリケーションです。 ポリー
をご覧ください。 、およびNpgsqlは、 IsTransient
再試行のトリガーとして使用できる例外(Entity Framework Coreにも同様の「再試行戦略」が含まれています)。この道を進む場合、トランザクションを正しく処理するのは特に難しいことに注意してください。