データベース接続の有効期間

デフォルトでは、MFDBFH でデータベース接続が確立されると、残りのプロセスの実行用に接続が開いたままになります。これは、データベース接続の確立と切断による不要なパフォーマンス オーバーヘッドを回避するためです。ただし、データベース接続の有効期間を制限する必要がある場合があります。次に例を示します。

  • SQL Server の master データベースおよび PostgreSQL の postgres データベースに接続する必要があるのは、データベースが存在するかどうかを確認するときと新しいデータベースを作成するときだけです。これらの操作は、一般にリージョン間データベース、リージョン データベース、またはデータストアにアクセスする必要がある初期の段階のプロセスで実行され、その後は必要ありません。
  • PostgreSQL などのデータベース サーバーは、一度に数百を超えるアクティブな接続を効率的に処理できない場合があります。このような状況では、実際に必要なときにのみデータベース接続を確立し、関連するデータベース操作が完了した時点 (バッチ ジョブの有効期間など) で接続を切断することが推奨されます。
  • 入出力最適化が有効になっている場合、MFDBFH はファイルの入出力操作をバックグラウンドのスレッドで実行します。メインの実行スレッドでデータベース操作に使用されるものとは別のデータベース接続が使用されます。ファイルが閉じられると、バックグラウンドのスレッドが停止し、後で再利用するためにデータベース接続が内部キャッシュに戻されます。デフォルトでは、MFDBFH は最大 10 個の接続をキャッシュします。再利用されない可能性のある接続用にデータベース サーバー リソースが不要に拘束されるのを避けるために、接続をキャッシュするのではなく、接続を閉じた方が望ましい場合があります。

このデフォルトの動作をオーバーライドするには、dbfhconfig -connopts コマンド ライン ユーティリティを使用してデータベース構成ファイルを更新します。次の表に、各オプションで作成されるエントリと変更後の動作の説明を示します。

属性 説明
connection.close.heartbeat="true|false" CAS プロセスのハートビート スレッドでリージョン間データベース接続を接続キャッシュに戻すか、ハートビート (5 秒間隔) ごとに切断するかを指定します。キャッシュされるか切断されるかは、構成されている接続キャッシュのサイズによって決まります。接続が切断された場合は、データベースに対する操作が次に必要になったときに再接続されます。デフォルトは「false」です。 <dsn name="SS.MYFILES" type="datastore" dsname="MYFILES" connection.close.heartbeat="false"/>
connection.close.syncpoint="true|false" データベース接続を接続キャッシュに戻すか、CAS 同期ポイントごとに切断するかを指定します。キャッシュされるか切断されるかは、構成されている接続キャッシュのサイズによって決まります。接続が切断された場合は、データベースに対する操作が次に必要になったときに再接続されます。デフォルトは「false」です。 <dsn name="SS.MYFILES" type="datastore" dsname="MYFILES" connection.close.syncpoint="false"/>
connection.close.task="true|false" データベース接続を接続キャッシュに戻すか、各 CAS タスク (CICS トランザクションやバッチ ジョブなど) の終了時に切断するかを指定します。キャッシュされるか切断されるかは、構成されている接続キャッシュのサイズによって決まります。接続が切断された場合は、データベースに対する操作が次に必要になったときに再接続されます。デフォルトは「false」です。 <dsn name="SS.MYFILES" type="datastore" dsname="MYFILES" connection.close.task="false"/>
connection.max.cached=<n/> MFDBFH で後で再利用するために接続キャッシュに保持しておく接続の最大数を指定します。値を 0 に設定すると、接続がキャッシュされず、不要になるとすぐに切断されます。デフォルトは 10 です。 <dsn name="SS.MYFILES" type="datastore" dsname="MYFILES" connection.max.cached=0/>
connection.max.dbopts=<n/> 接続が接続キャッシュに戻されるか切断されるまでに、MFDBFH がその接続で実行できるデータベース操作の最大数を指定します。デフォルトは INT_MAX (2147483647) です。 <dsn name="SS.MYFILES" type="datastore" dsname="MYFILES" connection.max.dbopts=5000/>

単一の <dsn> エントリに対して複数の属性を構成できます。たとえば、SQL Server の master データベースへの接続について、その接続をデータベースが存在するかどうかを確認した後や新しいデータベースを作成するときに切断するには、接続の有効期間の属性を次のように指定します。

<dsn name="SS.MASTER" type="database" dbname="master" connection.max.cached=0 connection.max.dbopts=0/>