6.8.2 インメモリデータ処理
インメモリデータ処理を適用するとバッチ処理の高速化を実現できます。インメモリデータ処理では,RDエリア内の全データをメモリ上に一括して読み込み,バッチ処理の実行中はメモリ上のデータだけを更新し,ディスク上のデータは更新しません。バッチ処理が完了した後にメモリ上の更新データを一括してディスクに書き込みます。バッチ処理中はディスク入出力が発生しません。ディスク入出力が発生するのは,RDエリア内のデータをメモリ上に読み込むときと,メモリ上の更新データをディスクに書き込むときの2回だけです。
インメモリデータ処理の概要を次の図に示します。
- [説明]
-
RDエリア内の全データをメモリ上に一括して読み込むことをインメモリ化といいます。インメモリ化はRDエリアごとに行います。インメモリ化しているRDエリアをインメモリRDエリアといいます。また,インメモリデータ処理で使用するデータバッファをインメモリデータバッファといいます。
- ポイント
-
インメモリデータ処理を実行する場合は,グローバルバッファを使用しないでインメモリデータバッファを使用します。インメモリデータバッファは,HiRDBが動的に共用メモリ上に確保するため,HiRDB管理者がインメモリデータバッファを定義する必要はありません。
バッチ処理の実行中はインメモリデータバッファ上のデータだけが更新されて,ディスク上のデータは更新されません。バッチ処理が完了した後にコマンド(pdholdコマンド)を実行して,インメモリデータバッファ上の更新情報を一括してディスクに書き込みます。シンクポイント時もディスクへの書き込みが発生しません。
なお,インメモリデータ処理を適用するためには,HiRDB Acceleratorが必要となります。
インメモリデータ処理の適用方法については,マニュアル「HiRDB バッチ高速化機能」を参照してください。
(1) グローバルバッファと比較した場合の利点
グローバルバッファを使用している場合はディスク入出力が定期的に発生しますが,インメモリデータバッファを使用している場合は,ディスク入出力が発生するのはインメモリ化時とディスクへのデータ書き込み時の2回だけです。シンクポイント時にもディスクへの書き込みが発生しません。そのため,インメモリデータバッファを使用する方が,グローバルバッファを使用したときに比べてディスク入出力回数が少なくなります。
そのほかにも,グローバルバッファと比べて次の利点があります。
-
バッファの管理処理が少ない
-
チューニングが不要
詳細については,マニュアル「HiRDB バッチ高速化機能」を参照してください。
(2) インメモリデータ処理の適用基準
次の場合にインメモリデータ処理を適用すると効果が期待できます。
-
処理時間の長いバッチ処理を実行している場合
大量のデータ更新を行う,処理時間の長いバッチ処理にインメモリデータ処理を適用すると,効果が期待できます。また,ログレスモードを適用すると,更に処理時間を短縮できます。
バッチ処理に掛かる時間が長いほど,ディスク入出力回数に差が出るため,インメモリデータ処理を適用したときの効果が期待できます。
-
複数のバッチ処理を連続して実行している場合
複数のバッチ処理を連続して実行する場合にインメモリデータ処理を適用すると効果が期待できます。
バッチ処理を連続して行うほど,ディスク入出力回数に差が出るため,インメモリデータ処理を適用したときの効果が期待できます。
-
グローバルバッファの排他競合が原因で性能が上がらない場合
グローバルバッファの排他競合が原因で性能が上がらない場合に,インメモリデータ処理を適用すると性能向上が期待できます。
グローバルバッファを使用する場合(インメモリデータ処理を使用しない場合),参照又は更新処理の発生時,グローバルバッファ上にデータがキャッシュされているかどうかを検索する処理(キャッシュサーチ処理)が行われます。このとき,グローバルバッファの全ページに対して排他が掛かるため,ほかの参照又は更新処理は排他待ちとなります。インメモリデータ処理の場合は,インメモリデータバッファ上に全データがキャッシュされているため,キャッシュサーチ処理が発生しません。グローバルバッファの全ページに対する排他制御がなくなるため,同時実行性の向上が見込まれ,その分性能向上が期待できます。例えば,同じグローバルバッファを割り当てている複数のRDエリアを更新するバッチ処理などで排他競合が多発している場合に,インメモリデータ処理を適用すると性能向上が期待できます。
なお,排他競合の発生頻度については,統計解析ユティリティのグローバルバッファに関する統計情報で確認できます。
-
メインフレームからデータを移行する場合
メインフレームの膨大なデータをHiRDBに移行する場合(データをHiRDBのデータベースにデータロードする場合)に,インメモリデータ処理を適用すると効果が期待できます。