ホームページ > バックエンド開発 > Golang > Go で行を挿入するときに Postgres 接続プールの枯渇を回避するにはどうすればよいですか?

Go で行を挿入するときに Postgres 接続プールの枯渇を回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-13 02:59:09
オリジナル
142 人が閲覧しました

How to Avoid Postgres Connection Pool Exhaustion When Inserting Rows in Go?

Go での行挿入のための再利用可能な Postgres DB 接続: 接続プールの枯渇の解決

目的は、単一の再利用可能な Postgres データベース接続を使用することですGo での行挿入用。このエラーは、接続の処理が不適切なため、コードが誤って複数の接続を開いたことが原因で発生します。

Postgres の接続プール メカニズムである sql.DB は、単一の接続ではなく接続のキャッシュを維持します。 Postgres サーバーの最大接続制限まで、必要に応じて接続を動的に割り当てます。ただし、返された Row 値に対して Scan を呼び出さずに QueryRow を使用すると、接続は適切に解放されません。

Row オブジェクトは、内部的に Rows インスタンスを保持し、独自の接続を管理します。スキャンが呼び出された場合のみ、接続は自動的に解放されます。 Scan の呼び出しを怠ると接続が占有されたままになり、DB は後続の QueryRow 呼び出しで新しい接続を開くことになります。これは接続が解放されずに発生するため、プールが枯渇し、問題が発生します。

これを解決するには、次のいずれかのアプローチを採用できます。

  • クエリは重要ではありません。
  • 返された *Row に対して Scan を呼び出して、

これらの変更を組み込んだ改訂されたコード スニペットは次のとおりです。

これにより、接続が即座に解放され、DB 接続プールが枯渇することがなくなります。

以上がGo で行を挿入するときに Postgres 接続プールの枯渇を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート