14.6.1 共用RDエリアの概要
通常,バックエンドサーバがアクセスできるのは,バックエンドサーバ下のRDエリアだけです。そのため,表の検索や更新時はできるだけ表を分割して格納した方が並列処理ができ,処理速度が向上します。しかし,複数のトランザクションからアクセスが集中し,かつ分割が難しい表などの場合,共用RDエリアに格納することで並列処理の効率が上がります。共用RDエリアとは,すべてのバックエンドサーバからアクセスできるユーザ用RDエリアのことです。共用RDエリアに格納する表を共用表,インデクスを共用インデクスといい,すべてのバックエンドサーバから参照できます。共用RDエリアに格納できるのは,共用表及び共用インデクスだけです。共用RDエリアの概要を次の図に示します。
なお,共用RDエリアを定義できるのはHiRDB/パラレルサーバだけです。
- 〔説明〕
-
共用RDエリアRDSHR01は,BES1〜3すべてのバックエンドサーバから参照できます。ただし,共用表の更新ができるのは更新可能バックエンドサーバ(BES3)だけです。BES1及び2は参照専用バックエンドサーバです。
- 〈この項の構成〉
(1) 効果
全バックエンドサーバが共用RDエリアにアクセスできるため,並列処理の効率が上がります。
(2) 適用基準
次の場合に共用RDエリアの使用をお勧めします。
-
複数のトランザクションからアクセスが集中するが,分割が難しい表の場合
-
結合処理のような複雑な検索処理をする場合
(3) 定義方法
共用RDエリアを使用するには,次のように指定します。
-
pdfmkfsコマンドの-kオプション(使用目的)にSDBを指定します。また,全バックエンドサーバから同じパス名でアクセスできるようにアクセスパスを設定します。
-
データベース初期設定ユティリティ(pdinit),又はデータベース構成変更ユティリティ(pdmod)のcreate rdarea文にsharedを指定し,ユーザ用RDエリアの定義をします。また,更新可能バックエンドサーバをserver nameオペランドに指定します。server nameオペランドに指定しなかったバックエンドサーバはすべて参照専用バックエンドサーバになります。
- 定義時の注意
-
-
共用RDエリアは,pd_max_rdarea_noオペランドで指定したRDエリアの最大数まで定義できます。ただし,共用RDエリアは全バックエンドサーバのRDエリアの数に加算されます。
-
異なるバックエンドサーバが更新可能バックエンドサーバである共用RDエリアを,同一HiRDBファイルシステム領域に定義してはいけません。
-
共用RDエリアは,共用RDエリア用のHiRDBファイルシステム領域に定義します。pdfmkfs -kコマンドにSDBを指定してください。なお,共用RDエリア用のHiRDBファイルシステム領域には共用RDエリア以外は定義できません。
-
図「共用RDエリアの概要」の場合の,データベース構成変更ユティリティ(pdmod)の制御文の例を次に示します。
create shared rdarea RDSHR01 globalbuffer buf01 for user used by PUBLIC server name BES3 …更新可能バックエンドサーバの指定 open attribute INITIAL page 4096 characters storage control segment 20 pages file name "\HiRDB\DATABASE\SHR1\rdshr01_f01" …ファイル名 initial 10000 segments ;
(4) 共用RDエリアの更新
共用RDエリアを更新する場合,LOCK文でIN EXCLUSIVE MODEを指定し,全バックエンドサーバの共用RDエリアに排他を掛けなければ実行できません。ただし,インデクスキー値を変更しないUPDATE文は,LOCK文を発行しないで実行できます。共用表の更新については,「共用表の操作」を参照してください。なお,共用表及び共用インデクスの更新はCOMMIT文発行時にディスクに書き込まれます。
(5) 共用RDエリアの閉塞状態の管理
共用RDエリアへのアクセスは,各バックエンドサーバで個別に管理されます。このため,障害発生時に,バックエンドサーバ間で閉塞状態が異なる場合があります。データベース構成変更ユティリティ(pdmod)や,データベース回復ユティリティ(pdrstr)を実行する場合は,pdholdコマンドで全バックエンドサーバ下の共用RDエリアの閉塞状態を一致させる必要があります。なお,pddbls -mコマンドで全バックエンドサーバの共用RDエリアの状態を表示できます。
(6) 共用RDエリアに対するユティリティ及び運用コマンドの実行
ユティリティ及び運用コマンドで共用RDエリア,共用表,又は共用インデクスを対象とする場合,HiRDBが内部的にLOCK TABLE文を発行し,全バックエンドサーバ下の共用RDエリアに排他を掛けることがあります。このため,共用RDエリア内の表やインデクスにアクセス中の業務があると,デッドロック,又はサーバ間のグローバルデッドロックが発生することがあります。ユティリティ及び運用コマンド実行時は,対象となる共用RDエリアをコマンド閉塞しておいてください。
(7) 共用RDエリア使用上の制限事項
-
系切り替え機能を使用する場合,更新可能バックエンドサーバがあるユニットは次のように配置してください。
-
参照専用バックエンドサーバと異なるホストに配置
-
系を切り替えたときに同一ホスト内で参照バックエンドサーバと混在しないように切り替え先を配置
参照専用バックエンドサーバは,共用RDエリアのディスクボリュームをクラスタソフトウェアの管理リソースにしないようにしてください。
-
-
共用RDエリアは全バックエンドサーバに配置されるため,フロータブルサーバは設置できません。
-
レプリケーションの反映先に共用表は指定できません。
-
ローカルバッファで共用RDエリアの表やインデクスを更新する場合は,LOCK TABLE文を発行して更新してください。LOCK TABLE文を発行しないで更新していると,サーバプロセスが異常終了してトランザクション回復プロセスが回復処理するとき,グローバルバッファで回復対象になる更新ページを保持できないことがあります。更新ページを保持できないと回復できないので,アボートコードPhb3008を出力してユニットは異常終了します。この場合,HiRDBを再開始してください。