接続プールプロパティの設定

sql パッケージが接続プールを管理する方法をガイドするプロパティを設定できます。これらのプロパティの効果に関する統計を取得するには、DB.Statsを使用します。

オープン接続の最大数の設定

DB.SetMaxOpenConns はオープン接続の数に制限を課します。この制限を超えると、新しいデータベース操作は既存の操作が終了するのを待ち、その時に sql.DB が別の接続を作成します。デフォルトでは、sql.DB は接続が必要なときにすべての既存の接続が使用中であれば、新しい接続を作成します。

制限を設定することは、データベースの使用をロックまたはセマフォを取得することに似たものにすることを考慮してください。その結果、アプリケーションが新しいデータベース接続を待ってデッドロックする可能性があります。

アイドル接続の最大数の設定

DB.SetMaxIdleConnssql.DB が維持するアイドル接続の最大数の制限を変更します。

特定のデータベース接続で SQL 操作が終了すると、通常はすぐにシャットダウンされません。アプリケーションはすぐに再度接続が必要になる可能性があり、オープン接続を保持することで次の操作のためにデータベースに再接続する必要がなくなります。デフォルトでは、sql.DB は常に2つのアイドル接続を保持します。制限を引き上げることで、並列性が高いプログラムでの頻繁な再接続を回避できます。

接続がアイドル状態である最大時間の設定

DB.SetConnMaxIdleTime は接続がアイドル状態である最大時間を設定し、その時間を超えると接続が閉じられます。これにより、sql.DB は指定された期間を超えてアイドル状態の接続を閉じます。

デフォルトでは、アイドル接続が接続プールに追加されると、それが再度必要になるまでそこに留まります。DB.SetMaxIdleConns を使用して並列活動のバースト中に許可されるアイドル接続の数を増やす場合、DB.SetConnMaxIdleTime を使用することで、システムが静かなときにそれらの接続を後で解放することができます。

接続の最大寿命の設定

DB.SetConnMaxLifetime を使用すると、接続が閉じられる前に保持できる最大時間を設定します。

デフォルトでは、接続は上記の制限に従って、任意の長さの時間使用および再利用できます。一部のシステム、例えば負荷分散されたデータベースサーバーを使用するシステムでは、アプリケーションが特定の接続を再接続せずに長時間使用しないようにすることが役立ちます。

専用接続の使用

database/sql パッケージには、データベースが特定の接続で実行される操作のシーケンスに暗黙の意味を割り当てる可能性がある場合に使用できる関数が含まれています。

最も一般的な例はトランザクションで、通常は BEGIN コマンドで始まり、COMMIT または ROLLBACK コマンドで終了し、これらのコマンドの間に接続で発行されたすべてのコマンドが全体のトランザクションに含まれます。このユースケースでは、sql パッケージのトランザクションサポートを使用します。 トランザクションの実行を参照してください。

個々の操作のシーケンスがすべて同じ接続で実行される必要がある他のユースケースでは、sql パッケージが専用接続を提供します。DB.Conn は専用接続を取得し、sql.Conn です。sql.Conn には、BeginTxExecContextPingContextPrepareContextQueryContext、および QueryRowContext のメソッドがあり、DB の同等のメソッドのように動作しますが、専用接続のみを使用します。専用接続の使用が終了したら、コードは Conn.Close を使用してそれを解放する必要があります。