Mirroring Controllerを利用している場合で、DBミラーリングサービスの運用中に、副系ノードでの参照系業務を実施するとき、以下に示すいくつかの留意点が必要です。留意点を守らなければ下記の問題が発生する可能性がありますので、十分注意してください。
ノードの切替え時間の拡大
縮退運用中の正系ノードの利用者業務への影響
DBミラーリングシステムでは、副系ノードのDBミラーリングサービスの運用中にデータベース二重化処理として、副系ノードのデータベースに対して更新操作を行います。データベース二重化処理と、参照系業務が競合すると、排他待ち、あるいはデッドロックが発生する場合があります。また、データベース二重化処理が排他待ちになってしまうと、ノードの切替え時間にも影響を及ぼします。
排他待ち、デッドロック発生を防止するため、参照系業務で実行するアプリケーションに以下のいずれかの設定を行ってください。
RERUNログ反映のコミット順序の保証単位にDSIを選択した場合
排他待ちの発生を防止するために、参照系業務で利用するSQLアプリケーションは以下の指定で実行して下さい。
Symfoware/RDBの排他制御の独立性水準にREAD UNCOMMITTEDを指定
Symfoware/RDBの排他制御のイルシデーションロックにNO LOCKを指定
RERUNログ反映のコミット順序の保証単位にロググループを選択した場合
デッドロックが発生すると、参照系業務で実行するアプリケーションが異常復帰します。そのため、デッドロックが発生したトランザクションの再実行を試みるように参照系業務で実行するアプリケーションを設計してください。
また、参照系業務で実行するアプリケーションのトランザクションを短くする、アクセスする資源の範囲を絞り込むなど、RERUNログ反映になるべく影響を与えないように参照系業務をチューニングしてください。なお、データベース二重化処理が排他待ちになってしまうと、ノードの切替え時間にも影響を及ぼします。
参照系業務のアプリケーションが、データベース二重化処理に影響を及ぼすような負荷の高い処理を行うと、ノードの切替え時間にも影響を及ぼします。
参照系の業務アプリケーションは、データベース二重化処理性能を考慮の上実行してください。
副系ノードでの参照系業務は、縮退運用を開始しても継続可能です。
しかし、以下の理由から縮退運用を開始した場合には、旧副系ノードの参照系業務をいったん停止して、ノード組込み後の新しい副系ノードで再開することを推奨します。
旧正系ノードの利用者業務と旧副系ノードの参照系業務が同時に動作するため、性能劣化の可能性があります。
帳票業務などで、正系ノードで更新中または更新直後のデータを参照したくないなど副系ノードのデータベースの利用を想定した参照系業務の場合は、縮退運用の開始後は、正系ノードになるため、継続できません。
DBミラーリングサービス運用中のトランザクション整合性の考慮
RERUNログ反映のコミット順序の保証単位にDSIを選択した場合、データベース二重化処理では、正系ノードのトランザクションを副系ノードでDSI単位に分割して多重でデータベースを更新します。このため、DBミラーリングサービスの運用中にデータベースの参照を行うと、DSI間でトランザクション整合性がない場合があります。
副系ノードの参照系業務でDSI間のトランザクションのコミット順序が保証されたデータベースの参照を実施したい場合には、RERUNログ反映のコミット順序の保証単位にロググループを選択してください。
なお、データベース二重化処理では、正系ノードで確定していないトランザクションの更新結果を副系ノードで参照しないことが保証されています。
ポイント
RERUNログ反映のコミット順序の保証単位にロググループを選択した場合で、データベース二重化処理と参照系業務間で排他待ちが発生している資源については、rdblkinfコマンドによる資源の占有情報の出力により確認してください。
参照
Symfoware/RDBの排他制御の詳細については“解説書”を参照してください。
排他の属性と選択方法の詳細については“アプリケーション開発ガイド(共通編)”を参照してください。
RERUNログ反映のコミット順序の保証単位は、RLP動作環境ファイルのREF_APPLY_MODEパラメタで指定します。RLP動作環境ファイルのREF_APPLY_MODEパラメタについては“5.2.8.4 RLP動作環境ファイルの編集”を参照してください。