13.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エリアを使用する場合にはBESが存在するすべてのユニットから共用RDエリアが格納してある共有ディスクをアクティブにしなければなりません。これによって,更新可能BESと参照専用BESが同一ホストに存在しているときに更新可能BESが系切り替えを行うことで共有ディスクを切り替えると,参照専用BESから共用RDエリアを参照できなくなるという問題があります。そのため,BESの存在するユニットの系切り替えを行う場合,系切り替えのシステム構成によって設定方法が異なります。系切り替えのシステム構成については,マニュアル「HiRDB システム運用ガイド」を参照してください。
(a) スタンバイ型系切り替え構成の場合
-
1:1系切り替え構成の場合
1:1系切り替え構成の場合は,更新可能BESと参照専用BESとが同一ホストに存在しないので,特別な設定はありません。系切り替えの設定は,マニュアル「HiRDB システム運用ガイド」の「クラスタソフトウェアによる共有ディスクのアクセス制御」を参照してください。
-
相互系切り替え構成/2:1系切り替え構成の場合
相互系切り替え構成の場合は,更新可能BESと参照専用BES以外(MGR,FES,DS)の相互系切り替え構成の場合は,特別な設定はありません。系切り替えの設定は,マニュアル「HiRDB システム運用ガイド」の「クラスタソフトウェアによる共有ディスクのアクセス制御」を参照してください。
更新可能BESと参照専用BESの相互系切り替え構成の場合は,共有ディスクの切り替えができません。系切り替えの設定は,マニュアル「HiRDB システム運用ガイド」の「HiRDBによる共有ディスクのアクセス制御」を参照してください。
(b) 1:1スタンバイレス型系切り替えの場合
更新可能BESで1:1スタンバイレス型系切り替え構成の場合は,系切り替え先は参照専用BESであり,共有ディスクの切り替えができません。そのため,系切り替えの設定は,マニュアル「HiRDB システム運用ガイド」の「HiRDBによる共有ディスクのアクセス制御」を参照してください。
(c) 影響分散スタンバイレス型系切り替えの場合
更新可能BESで影響分散スタンバイレス型系切り替え構成の場合は,系切り替え先は参照専用BESであり,共有ディスクの切り替えができません。そのため,系切り替えの設定は,マニュアル「HiRDB システム運用ガイド」の「HiRDBによる共有ディスクのアクセス制御」を参照してください。
- 注
-
参照専用BESの場合,共用RDエリアの共有ディスクをクラスタソフトウェアの管理リソースとしないでください。
(7) 共用RDエリアに対するユティリティ及び運用コマンドの実行
ユティリティ及び運用コマンドで共用RDエリア,共用表,又は共用インデクスを対象とする場合,HiRDBが内部的にLOCK TABLE文を発行し,全バックエンドサーバ下の共用RDエリアに排他を掛けることがあります。このため,共用RDエリア内の表やインデクスにアクセス中の業務があると,デッドロック,又はサーバ間のグローバルデッドロックが発生することがあります。ユティリティ及び運用コマンド実行時は,対象となる共用RDエリアをコマンド閉塞しておいてください。
(8) 共用RDエリア使用上の制限事項
-
系切り替え機能を使用する場合,更新可能バックエンドサーバがあるユニットは次のように配置してください。
-
参照専用バックエンドサーバと異なるホストに配置
-
系を切り替えたときに同一ホスト内で参照バックエンドサーバと混在しないように切り替え先を配置
参照専用バックエンドサーバは,共用RDエリアのディスクボリュームをクラスタソフトウェアの管理リソースにしないようにしてください。
-
-
共用RDエリアは全バックエンドサーバに配置されるため,フロータブルサーバは設置できません。
-
レプリケーションの反映先に共用表は指定できません。
-
共用RDエリアを更新可能なオンライン再編成の対象とする場合,サーバ単位(-sオプション)の実行はできません。ただし,一部のバックエンドサーバが停止中ですぐに起動できないなどの場合,次の操作は,サーバ単位に実行できます。
-
強制的に,起動中のバックエンドサーバだけでオンライン再編成閉塞(オンライン再編成のデータベース静止化)を中止する(pdorbegin -u)
-
強制的に,起動中のバックエンドサーバだけで更新可能なオンライン再編成の追い付き反映処理を中止する(pdorend -u)
このとき起動していなかったバックエンドサーバは,起動完了後にほかのバックエンドサーバと同じ状態にしてください。
-
-
ローカルバッファで共用RDエリアの表やインデクスを更新する場合は,LOCK TABLE文を発行して更新してください。LOCK TABLE文を発行しないで更新していると,サーバプロセスが異常終了してトランザクション回復プロセスが回復処理するとき,グローバルバッファで回復対象になる更新ページを保持できないことがあります。更新ページを保持できないと回復できないので,アボートコードPhb3008を出力してユニットは異常終了します。この場合,HiRDBを再開始してください。