Hitachi

ノンストップデータベース HiRDB Version 10 システム定義(UNIX(R)用)


9.2.18 排他制御に関するオペランド

◆ pd_lck_deadlock_info = Y|N

デッドロック情報及びタイムアウト情報を出力するかどうかを指定します。デッドロック情報及びタイムアウト情報は,$PDDIR/spool/pdlckinf下に出力されます。デッドロック情報及びタイムアウト情報については,マニュアル「HiRDB システム運用ガイド」を参照してください。

Y:デッドロック情報及びタイムアウト情報を出力します。

N:デッドロック情報及びタイムアウト情報を出力しません。

《ほかのオペランドとの関連》
  • pd_lck_deadlock_checkオペランドにNを指定した場合は,このオペランドにYを指定しても,デッドロック情報を出力しません。

◆ pd_lck_wait_timeout = 排他待ち限界経過時間

〜<符号なし整数>((0〜65535))《180》(単位:秒)

排他待ち時間を監視する最大時間を秒単位で指定します。排他待ち時間とは,排他要求が待ち状態になってから解除されるまでの時間のことです。

指定した時間内に待ち状態が解除されない場合,SQLはエラーリターンします。0を指定した場合,排他待ち時間を監視しないで,待ち状態が解除されるまで待ち続けます。

《クライアント環境定義との関連》
  • PDLCKWAITTIME

    このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDLCKWAITTIMEを指定してください。PDLCKWAITTIMEについては,マニュアル「HiRDB UAP開発ガイド」を参照してください。

  • PDCWAITTIME

    次に示す関係を満たすように各オペランドを設定することで,排他待ち限界経過時間を迎えても待ち状態が解除されない場合に,タイムアウト情報を出力するようになります。

    クライアント環境定義のPDCWAITTIMEの指定値>pd_lck_wait_timeoutの指定値(クライアントごとに設定している場合は,PDLCKWAITTIMEの指定値)

    PDCWAITTIMEについては,マニュアル「HiRDB UAP開発ガイド」,タイムアウト情報については,マニュアル「HiRDB システム運用ガイド」を参照してください。

《ほかのオペランドとの関連》
  • このオペランドは,次に示すオペランドと関連があります。

    ・pd_lck_deadlock_check

    ・pd_lck_deadlock_check_interval

    ・pd_lck_deadlock_info

◆ pd_nowait_scan_option = LOCK|NOLOCK

WITHOUT LOCK NOWAIT指定の検索を実行したときの処理方式を指定します。

LOCK:

WITHOUT LOCK NOWAIT指定の検索を実行した場合,行単位で排他を確保します。このとき,ほかのトランザクションが更新前か更新後の行だけを参照できます。ほかのトランザクションが更新中の場合は,その行の更新処理が終了するまで待機します。

NOLOCK:

WITHOUT LOCK NOWAIT指定の検索を実行した場合,排他を確保しません。このとき,ほかのトランザクションが更新中の行も参照できます。ただし,更新中の行を参照した場合,検索対象の行を受け取れないことがあります。

《注意事項》

このオペランドにLOCKを指定して,非FIX表のUPDATE及びWITHOUT LOCK NOWAIT指定の検索を実行すると,排他資源数が1トランザクション当たり1個増加します。また,非FIX表に対するUPDATE文による更新で出力されるデータ1件当たりの基本行ログ量が628バイト増加します。

《各見積もり式への影響》

pd_nowait_scan_optionオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「表データ更新時に出力されるシステムログ量」の「基本行ログ量の見積もり」

◆ pd_lck_queue_limit = 排他待ちユーザ数警告メッセージ出力契機

〜<符号なし整数>((0〜500))《10》

同一リソースへの排他処理で,排他待ちユーザ数が多数発生したとき,警告メッセージを出力する境界となる排他待ちユーザ数を指定します。

同一リソースでの排他待ちユーザ数が指定値に達すると,警告メッセージ(KFPS00446-W)を出力します。メッセージの出力先は,メッセージログファイル及びsyslogfileです。

指定値が0の時は,警告メッセージを出力しません。

◆ pd_deadlock_priority_use = Y|N

デッドロックの優先順位を制御するかどうかを指定します。

Y:

デッドロック発生時,どのプログラムを優先的に実行させるかを制御します。デッドロックが発生した場合,優先順位の一番低いプログラムのSQLがエラーとなります。優先順位が等しい場合は,トランザクションを実行した時刻が一番遅いプログラムのSQLがエラーとなります。デッドロックの優先順位は,クライアント環境定義のPDDLKPRIOオペランドで指定してください。クライアント環境定義のPDDLKPRIOオペランドについては,マニュアル「HiRDB UAP開発ガイド」を参照してください。

N:

実行したトランザクションの時刻が一番遅いプログラムのSQLがエラーとなります。

◆ pd_command_deadlock_priority = 32|64|96|120

コマンドのデッドロックプライオリティ値を指定します。

このオペランドの指定値が有効になる運用コマンドを次に示します。

  • pdhold -b(バックアップ閉塞)

  • pdhold -s(同期化閉塞)

  • pddbchg(レプリカRDエリアのレプリカステータスの切り替え)

  • pdorbegin(オンライン再編成のデータベース静止化)

  • pdorend(オンライン再編成の追い付き反映)

コマンドのデッドロックプライオリティ値を変更する方法についてはマニュアル「HiRDB システム運用ガイド」を参照してください。

《前提条件》

pd_deadlock_priority_useオペランドにYが指定されている必要があります。

《指定値の目安》

デッドロック発生時,業務プログラム側でリトライ可能なシステムの場合,運用コマンドの優先度を高くして業務プログラム側をエラーにできます。指定する値が小さいほど排他時の優先度は高くなります。

◆ pd_key_resource_type = TYPE1|TYPE2

インデクスキー値の排他資源の作成方法を指定します。インデクスキー値の排他資源の作成方法については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

TYPE1:インデクスキー値の排他資源をビットシフトしながら排他的論理和で作成します。

TYPE2:インデクスキー値の排他資源をバイトオーダの排他的論理和で作成します。

《指定値の目安》
  • 通常はTYPE1を指定します。キー長が10バイトを超える場合,インデクスキー値の排他資源でシノニムによる排他競合が発生することがあります。TYPE1を指定すると,これを防止できます。

  • TYPE2は,HiRDB Version 5.0 05-02又はHiRDB Version 4.0 04-05より前の処理方式です。バージョンアップしたユーザで,以前の処理方式でインデクスキー値の排他資源でシノニムによる排他競合が発生していなかった場合は,TYPE2を指定してください。

◆ pd_lck_pool_size = サーバ当たりの排他制御用プールサイズ

〜<符号なし整数>(単位:キロバイト)

  • 32ビットモードの場合:((1〜2000000))《16000》

  • 64ビットモードかつ推奨モードの場合:((1〜2000000000))《128000》

  • 64ビットモードかつ0904互換モードの場合:((1〜2000000000))《32000》

HiRDB/シングルサーバの場合は,シングルサーバの排他制御で使用する共用メモリ領域(排他制御用プール)の大きさをキロバイト単位で指定します。

HiRDB/パラレルサーバの場合は,バックエンドサーバ及びディクショナリサーバの排他制御で使用する共用メモリ領域の大きさをキロバイト単位で指定します。なお,フロントエンドサーバの排他制御で使用する共用メモリ領域の大きさは,pd_fes_lck_pool_sizeオペランドで指定してください。

このオペランドの指定対象の領域は,排他資源管理テーブルとして使用されます。排他資源管理テーブル数,排他要求数,及び排他制御用プールサイズの間には,次の関係があります。

「排他資源管理テーブル数」=「排他要求数」=「排他制御用プールサイズ」×係数

《指定値の目安》
  • 32ビットモードの場合,6件の排他要求で1キロバイトの排他制御用プールサイズが必要です。

  • 64ビットモードの場合,4件の排他要求で1キロバイトの排他制御用プールサイズが必要です。

  • 次に示す計算式でこのオペランドの指定値を見積もってください。

    HiRDBの種類

    計算式(単位:キロバイト)

    HiRDB/シングルサーバの場合(32ビットモード)

    ↑↑a÷pd_lck_pool_partitionの値↑÷6↑×pd_lck_pool_partitionの値

    HiRDB/パラレルサーバの場合(32ビットモード)

    ↑↑b÷pd_lck_pool_partitionの値↑÷6↑×pd_lck_pool_partitionの値

    HiRDB/シングルサーバの場合(64ビットモード)

    ↑↑a÷pd_lck_pool_partitionの値↑÷4↑×pd_lck_pool_partitionの値

    HiRDB/パラレルサーバの場合(64ビットモード)

    ↑↑b÷pd_lck_pool_partitionの値↑÷4↑×pd_lck_pool_partitionの値

    a:シングルサーバで同時実行するトランザクションの排他要求数の総和です。排他要求数はSQLによって異なります。排他要求数の総和の求め方については,「排他資源数の見積もり」を参照してください。

    b:各サーバ(ディクショナリサーバ又はバックエンドサーバ)で同時実行するトランザクションの排他要求数の総和です。排他要求数はSQLによって異なります。排他要求数の総和の求め方については,「排他資源数の見積もり」を参照してください。

    特に,定義系SQLのDROP TABLE又はDROP SCHEMAを実行する場合は,このオペランドの指定値を正確に見積もって指定してください。

《指定値のチューニング方法》

統計解析ユティリティ(システムの稼働に関する統計情報)の「排他資源管理テーブル使用率(%OF USE LOCK TABLE)」を参照してください。使用率の最大値が80%以上の場合は,これからのデータベース拡張に備えて,このオペランドの値を大きくすることをお勧めします。使用率の最大値が10%以下の場合は,共用メモリを節約するために,このオペランドの値を小さくすることをお勧めします。

注※

HiRDB/パラレルサーバの場合は「サーバごとのシステムの稼働に関する統計情報」で,ディクショナリサーバ及びバックエンドサーバの「排他資源管理テーブル使用率(%OF USE LOCK TABLE)」を参照してください。

《注意事項》
  • このオペランドの指定値が小さ過ぎると,SQLがエラーリターンすることがあります。

  • このオペランドには,必要以上に大きな値を指定しないでください。このオペランドの指定値を大きくすると,HiRDBが使用する共用メモリが増加します。これによって,共用メモリが不足しHiRDBを開始できないことがあります。

  • 行数が多い表に対して,行単位に排他を取得しながら全件検索すると,件数の増加に応じてこの指定値も拡張しなければならなくなり,メモリ所要量が増加してしまいます。このような場合は,UAPで次のような工夫をしてください。

    ・表単位に排他を取得する

    ・無排他検索機能が適用できれば,無排他で検索する

    ・検索条件を絞り,複数回のトランザクションに分けて処理する

《ほかのオペランドとの関連》
  • このオペランドは,pd_lck_pool_partitionオペランドと関連があります。

◆ pd_fes_lck_pool_size = フロントエンドサーバの排他制御用プールサイズ

〜<符号なし整数>(単位:キロバイト)

  • 32ビットモードの場合:((1〜2000000))

  • 64ビットモードの場合:((1〜2000000000))

このオペランドはHiRDB/パラレルサーバ限定のオペランドです。

フロントエンドサーバの排他制御で使用する共用メモリ領域(排他制御用プール)の大きさをキロバイト単位で指定します。なお,シングルサーバ,ディクショナリサーバ,又はバックエンドサーバの排他制御で使用する共用メモリ領域の大きさは,pd_lck_pool_sizeオペランドで指定してください。

このオペランドの指定対象の領域は,排他資源管理テーブルとして使用されます。排他資源管理テーブル数,排他要求数,及び排他制御用プールサイズの間には,次の関係があります。

「排他資源管理テーブル数」=「排他要求数」=「排他制御用プールサイズ」×係数

《指定値の目安》
  • 32ビットモードの場合,6件の排他要求で1キロバイトの排他制御用プールサイズが必要です。

  • 64ビットモードの場合,4件の排他要求で1キロバイトの排他制御用プールサイズが必要です。

  • 次に示す計算式を基に,このオペランドの指定値を見積もってください。

    ↑↑(a+b)÷pd_fes_lck_pool_partitionの値↑÷c↑×pd_fes_lck_pool_partitionの値  (キロバイト)

    a:フロントエンドサーバで同時実行するトランザクションの排他要求数の総和です。排他要求数はSQLによって異なります。排他要求数の総和の求め方については,「排他資源数の見積もり」を参照してください。

    b:(pd_max_users+pd_max_reflect_process_countの値+3)×(pd_max_access_tablesの値+4)

    c:32ビットモードの場合は6,64ビットモードの場合は4を代入してください。

《指定値のチューニング方法》

統計解析ユティリティ(サーバごとのシステムの稼働に関する統計情報)で,フロントエンドサーバの「排他資源管理テーブル使用率(%OF USE LOCK TABLE)」を参照してください。使用率の最大値が80%以上の場合は,これからのデータベース拡張に備えて,このオペランドの値を大きくすることをお勧めします。使用率の最大値が10%以下の場合は,共用メモリを節約するために,このオペランドの値を小さくすることをお勧めします。

《オペランドの省略値》

このオペランドの省略値を次に示します。

・32ビットモードの場合

{(pd_max_users+pd_max_reflect_process_countの値+3)×(pd_max_access_tablesの値+4)}÷ 6

・64ビットモードの場合

{(pd_max_users+pd_max_reflect_process_countの値+3)×(pd_max_access_tablesの値+4)}÷ 4

《注意事項》
  • このオペランドの指定値が小さ過ぎると,SQLがエラーリターンすることがあります。

  • このオペランドには,必要以上に大きな値を指定しないでください。このオペランドの指定値を大きくすると,HiRDBが使用する共用メモリが増加します。これによって,共用メモリが不足しHiRDBを開始できないことがあります。

《ほかのオペランドとの関連》

このオペランドは,pd_fes_lck_pool_partitionオペランドと関連があります。

◆ pd_lck_pool_partition = サーバ当たりの排他制御用プール分割数

〜<符号なし整数>((1〜5000))《1》

排他制御処理を分散する場合にこのオペランドを指定してください。

HiRDB/シングルサーバの場合は,排他制御処理を分散するときにシングルサーバの排他制御で使用する排他制御用プールパーティション数を指定します。

HiRDB/パラレルサーバの場合は,排他制御処理を分散するときにバックエンドサーバ及びディクショナリサーバの排他制御で使用する排他制御用プールパーティション数を指定します。なお,フロントエンドサーバの排他制御で使用する排他制御用プールパーティション数は,pd_fes_lck_pool_partitionオペランドで指定してください。

排他制御処理の分散については,マニュアル「HiRDB システム運用ガイド」を参照してください。

《指定値のチューニング方法》

排他制御用プールパーティション数のチューニング方法については,マニュアル「HiRDB システム運用ガイド」を参照してください。

《注意事項》
  • このオペランドの指定値を大きくし過ぎると,各排他制御用プールパーティションに割り当てられる共用メモリのサイズが小さくなるため,排他制御用プールパーティションが容量不足となりSQLがエラーリターンすることがあります。また,排他制御の処理に時間が掛かるため,システムのパフォーマンスが下がります。この場合,このオペランドの指定値を小さくしてください。

  • 排他制御用プールサイズは1キロバイト以上必要であるため,pd_lck_pool_sizeの値よりも大きな値を指定した場合,このオペランドにはpd_lck_pool_sizeの値が仮定されます。また,このとき,KFPS00421-Wメッセージが出力されます。

  • このオペランドに2以上を指定した場合は,デッドロック監視の処理方式がインターバル監視方式となり,デッドロック発生から検出までに時間差が発生します。デッドロック監視の処理方式については,マニュアル「HiRDB UAP開発ガイド」の「デッドロックと回避策」を参照してください。

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_lck_pool_size

  • pd_lck_deadlock_check_interval

《各見積もり式への影響》

pd_lck_pool_partitionオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「HiRDB/シングルサーバで起動するプロセス」

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

  • 「HiRDB/パラレルサーバで起動するプロセス」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

◆ pd_fes_lck_pool_partition = フロントエンドサーバの排他制御用プール分割数

〜<符号なし整数>((1〜5000))《1》

排他制御処理を分散するときにフロントエンドサーバの排他制御で使用する排他制御用プールパーティション数を指定します。なお,シングルサーバ,ディクショナリサーバ,又はバックエンドサーバの排他制御で使用する排他制御用プールパーティション数は,pd_lck_pool_partitionオペランドで指定してください。

排他制御処理の分散については,マニュアル「HiRDB システム運用ガイド」を参照してください。

《指定値のチューニング方法》

排他制御用プールパーティション数のチューニング方法については,マニュアル「HiRDB システム運用ガイド」を参照してください。

《注意事項》
  • このオペランドの指定値を大きくし過ぎると,各排他制御用プールパーティションに割り当てられる共用メモリのサイズが小さくなるため,排他制御用プールパーティションが容量不足となりSQLがエラーリターンすることがあります。また,排他制御の処理に時間が掛かるため,システムのパフォーマンスが下がります。この場合,このオペランドの指定値を小さくしてください。

  • 排他制御用プールサイズは1キロバイト以上必要であるため,pd_lck_pool_sizeの値よりも大きな値を指定した場合,このオペランドにはpd_lck_pool_sizeの値が仮定されます。また,このとき,KFPS00421-Wメッセージが出力されます。

  • このオペランドに2以上を指定した場合は,デッドロック監視の処理方式がインターバル監視方式となり,デッドロック発生から検出までに時間差が発生します。デッドロック監視の処理方式については,マニュアル「HiRDB UAP開発ガイド」の「デッドロックと回避策」を参照してください。

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_fes_lck_pool_size

  • pd_lck_deadlock_check_interval

《各見積もり式への影響》

pd_fes_lck_pool_partitionオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

◆ pd_lck_until_disconnect_cnt = 1サーバ当たりのUNTIL DISCONNECT指定の排他表とRDエリア数の総和

〜<符号なし整数>((0〜140000))

  • ディクショナリサーバ以外かつ推奨モードの場合:《10000》

  • ディクショナリサーバかつ推奨モードの場合:《256》

  • 0904互換モードの場合:《256》

トランザクションを越えて保持する表,RDエリア,インナレプリカ構成管理,及びレプリカグループ構成管理の排他資源数を指定します。このオペランドの値に従って,表,RDエリア,インナレプリカ構成管理,レプリカグループ構成管理のUNTIL DISCONNECT指定の排他を管理するブロックを共用メモリに確保します。

《注意事項》

HiRDB/パラレルサーバの場合,バックエンドサーバとディクショナリサーバでこのオペランドの指定値の見積もり方法が異なります。サーバ共通定義でこのオペランドを指定した場合,バックエンドサーバとディクショナリサーバの両方に指定値が適用されます。ディクショナリサーバだけ異なる値を有効にしたい場合は,ディクショナリサーバ定義にこのオペランドを指定してください。

《指定値の目安》

通常はこのオペランドを指定する必要はありません。次に示す場合に指定値を変更するかどうかを検討してください。

  • 同時に実行するユティリティの数を大量に増やす場合

  • ホールダブルカーソルを使用する場合

  • pdlbufferオペランドで指定したローカルバッファを使用する場合

  • 共用RDエリアを使用する場合

  • SQLセッション固有一時表を使用する場合

このオペランドの指定値の見積もり方法については,「1サーバ当たりのUNTIL DISCONNECT指定の排他表とRDエリア数の総和(pd_lck_until_disconnect_cnt)の見積もり式」を参照してください。

《指定値のチューニング方法》

このオペランドの指定値が小さいと,トランザクションがロールバックしたり,リターンコード8でユティリティが異常終了したりします。このとき,KFPA11914-E,又はKFPH28001-Eメッセージが出力されます。この現象が発生したら,このオペランドの値を大きくしてください。

なお,このオペランドの値を大きくすると,それに比例して必要なメモリと,シンクポイントダンプファイルの容量が増加します。《各見積もり式への影響》に従って見積もる必要があります。

《各見積もり式への影響》

pd_lck_until_disconnect_cntオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

  • 「シンクポイントダンプファイルのレコード数の求め方」

  • 「シングルサーバが使用する共用メモリの計算式」の「計算式2」

  • 「ディクショナリサーバが使用する共用メモリの計算式」の「計算式2」

  • 「バックエンドサーバが使用する共用メモリの計算式」の「計算式2」

◆ pd_max_open_holdable_cursors = UNTIL DISCONNECT指定LOCK文非実行時のホールダブルカーソルの最大同時オープン数

〜<符号なし整数>((16〜1024))《16》

UNTIL DISCONNECT指定のLOCK文を実行しない表に対してホールダブルカーソルを使用する場合に,そのホールダブルカーソルのトランザクション当たりの最大同時オープン数を指定します。

《注意事項》

このオペランドに省略時解釈値以外の値を指定すると,共用メモリ使用量が増加します。

《ほかのオペランドとの関連》

このオペランドと次に示すオペランドの指定値は,ロックサーバの共用メモリサイズ計算に使用されます。32ビットモードのHiRDBの場合,各オペランドの指定値が大き過ぎると,ロックサーバの共用メモリサイズが2ギガバイトを超えるため,HiRDBを開始できなくなることがあります。ロックサーバの共用メモリサイズが2ギガバイトを超えないように,このオペランドと次に示すオペランドの指定値を調整してください。

  • pd_max_access_tables

  • pd_max_users

  • pd_max_bes_process

  • pd_max_dic_process

  • pd_lck_hash_entry

  • pd_lck_pool_size

共用メモリについては,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

◆ pd_lck_hash_entry = 排他制御用プールで使用するハッシュエントリ数

〜<符号なし整数>((0〜2147483647))《0》

排他制御用プールで使用するハッシュテーブルのエントリ数を指定します。HiRDBはここで指定された値に従ってサーバ(シングルサーバ,フロントエンドサーバ,バックエンドサーバ,ディクショナリサーバ)ごとにユニットコントローラ用の共用メモリに排他制御用プールを確保します。

《指定値の目安》

通常はこのオペランドを省略してください。

次に示す条件に該当する場合は指定値を検討してください。

  • バージョン06-02以降にバージョンアップする場合に共用メモリサイズをできるだけ変更したくないときは11261を指定してください。この場合,バージョンアップ前と同数のハッシュエントリ数を確保するため,排他制御用プール中のハッシュテーブルサイズがバージョンアップ前と同じになります。

  • このオペランドに推奨値より大きい値を指定すると,性能が向上することがあります。ただし,変数aより大きい値を指定しても,aを指定したときよりも性能が向上することはありません。

    推奨値を次に示します。

    推奨値=MAX(↑a÷10↑,11261)を超えない最大の素数

    変数

    変数の算出式

    シングルサーバの場合

    (pd_max_users+pd_max_reflect_process_countの値+3)×(pd_max_access_tablesの値+14)+pd_lck_pool_size×c

    フロントエンドサーバの場合

    pd_fes_lck_pool_sizeが省略されている場合

    (b+3)×(pd_max_access_tablesの値+4)

    pd_fes_lck_pool_sizeが指定されている場合

    pd_fes_lck_pool_size値×c

    バックエンドサーバ,ディクショナリサーバの場合

    (b+3)×10+pd_lck_pool_sizeの値×c

    フロントエンドサーバの場合

    マルチフロントエンドサーバの場合

    pd_max_users+pd_max_reflect_process_countの値+1

    マルチフロントエンドサーバでない場合

    pd_max_users+pd_max_reflect_process_countの値

    バックエンドサーバの場合

    pd_max_usersの値>pd_max_bes_processの値の場合

    pd_max_users+pd_max_reflect_process_countの値

    pd_max_usersの値≦pd_max_bes_processの値の場合

    pd_max_bes_process+pd_max_reflect_process_countの値

    ディクショナリサーバの場合

    pd_max_usersの値>pd_max_dic_processの値の場合

    pd_max_users+pd_max_reflect_process_countの値

    pd_max_usersの値≦pd_max_dic_processの値の場合

    pd_max_dic_process+pd_max_reflect_process_countの値

    32ビットモードの場合は6,64ビットモードの場合は4

《オペランドの規則》
  • このオペランドが0の場合,HiRDBはサーバごとに推奨値を計算します。

  • このオペランドに0でも素数でもない値を指定した場合,HiRDBはその指定値を超えない最大の素数が指定されたと仮定します。

《注意事項》

このオペランドの指定値が小さ過ぎると,ハッシュエントリ不足が発生して性能が低下することがあります。このオペランドを省略すれば,ハッシュエントリ不足及びハッシュエントリ不足による性能低下は発生しません。

◆ pd_indexlock_mode = KEY|NONE

B-treeインデクスの排他制御方式を指定します。

KEY:インデクスキー値で排他をします。

NONE:インデクスキー値で排他をしません(インデクスキー値無排他を実施します)。

インデクスキー値無排他については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

《指定値の目安》

通常はNONEを推奨します。ただし,ユニークインデクスの更新(削除したキー値の追加)が発生する場合は,KEYにするか,又は残存エントリを残さない運用を検討してください。

《ほかのオペランドとの関連》

pd_inner_replica_controlオペランドを指定すると,このオペランドの指定値はNONEが仮定されます。

このオペランドはpd_lock_uncommited_delete_dataオペランドと関連があります。詳細については,pd_lock_uncommited_delete_dataオペランドの説明を参照してください。

◆ pd_lock_uncommited_delete_data = WAIT|NOWAIT

コミットしていない削除データの排他待ち制御方式を指定します。

WAIT:

DELETE文で削除した行,又はUPDATE文で更新した更新前のインデクスキーに対し,検索時に削除又は更新したトランザクションが決着するまで排他待ちし,トランザクション決着後のデータを基に検索結果を返す方式を指定します。また,インデクスキー値排他と同じ方式で一意性制約が保証されます。インデクスキー値排他については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

NOWAIT:

DELETE文で削除した行,又はUPDATE文で更新した更新前のインデクスキーに対し,検索時に削除又は更新したトランザクションの決着を待たないで検索結果を返す方式を指定します。

《注意事項》

次の場合には,このオペランドにWAITを指定しても無効になります。

  • ディクショナリ表を検索又は更新する場合

  • WITHOUT ROLLBACKオプションを指定した表にインデクスを定義しないで検索又は更新する場合

このオペランドにWAITを指定すると,インデクスが定義された表の表格納RDエリアを構成するHiRDBファイルの使用可能サイズが次のように制限されます。

表格納RDエリアのページ長(バイト)

pd_lock_uncommited_delete_dataの指定値

WAIT

NOWAIT

4096

32GB

64GB

6144

48GB

上記以外

64GB

HiRDBファイルのサイズが既に使用可能サイズを超えている場合,又は使用可能サイズ以上のサイズのファイルを使用したい場合には,表格納RDエリアのページサイズを8192バイト以上に変更してください。ページサイズを変更しないでそのまま運用すると,次の場合にエラーとなり,警告メッセージKFPA19176-Eが出力されます。

  • 行の追加で使用可能サイズを超える領域を割り当てたとき

  • 使用可能サイズを超える領域のページに格納されている行に対して更新又は削除の操作をしたとき

《クライアント環境定義との関連》

クライアント環境定義のPDLOCKSKIPオペランドにYESを指定している場合は,このオペランドにWAITを指定しても無効となり,無排他条件判定の処理が優先されます。そのため,削除中の行では排他待ちをしません。ただし,削除した行のインデクスは残存エントリとして残ります。

《ほかのオペランドとの関連》

このオペランドの指定値とpd_indexlock_modeオペランドの指定値には,指定できない組み合わせがあります。指定できない組み合わせを次に示します。

pd_lock_uncommited_delete_dataの指定値

pd_indexlock_modeの指定値

NONE

KEY

WAIT

×※1

NOWAIT

NOWAIT(過去にWAIT指定履歴あり)

×※2

(凡例)

○:指定できる組み合わせです。

×:指定できない組み合わせです。

注※1

指定した場合,HiRDB起動時にエラー(KFPS01857-E)となります。

注※2

このオペランドにWAITを指定してHiRDBを開始したことがあると,このオぺランドにNOWAITを指定してpd_indexlock_modeオペランドにKEYを指定した場合,DBアクセス時に不正な検索結果が出力されます。データベース初期設定ユティリティ(pdinit)を実行してHiRDBを初期化してから再度オペランドを指定してください。

◆ pd_dbreuse_remaining_entries = ALL|ONLY_DIC|NONE|ONLY_USER|NOTHING

インデクスキー値無排他を適用している場合,インデクスのキー値を削除した際に,インデクス格納ページに残存エントリが発生します。この場合,複数のトランザクションで次の操作を実行すると,異なるインデクスキー値の操作であっても排他待ちが発生することがあります。

  • ユーザ表の場合

    INSERT文,UPDATE文,又は,DELETE文を繰り返し実行する。

  • データディクショナリ表の場合

    定義系SQL文,pdmodを繰り返し実行する。

このオペランドは,行データ挿入の際に,行識別子(行を一意に識別するためにシステムが割り当てる値)の再利用を抑止して,排他待ちの発生頻度を低くするためのオペランドです。

ALL:

行識別子を再利用します。

複数のトランザクションで表を更新したときに,操作対象,及び挿入対象とした行識別子と残存エントリの行識別子が重複した場合,異なるインデクスやキー値の操作であっても排他待ちが発生することがあります。

ONLY_DIC:

データディクショナリ表だけ,行識別子を再利用します。

ユーザ表は,ページごとに決められた行識別子の上限(255)を超過するまで行識別子の再利用を抑止します。

これによって,複数トランザクションで異なるインデクスキー値を操作したときの排他待ちの発生頻度を低くできます。

NONE:

指定した場合,ONLY_DICとみなして動作します。通常はONLY_DICを指定してください。

ONLY_USER:

ユーザ表だけ,行識別子を再利用します。

データディクショナリ表は,ページごとに決められた行識別子の上限(255)を超過するまで行識別子の再利用を抑止します。

これによって,複数トランザクションで異なるインデクスキー値を操作したときの排他待ちの発生頻度を低くできます。

NOTHING:

ユーザ表とデータディクショナリ表について,ページごとに決められた行識別子の上限(255)を超過するまで行識別子の再利用を抑止します。

これによって,複数トランザクションで異なるインデクスキー値を操作したときの排他待ちの発生頻度を低くできます。

指定値ごとの,排他待ちの軽減効果を次に示します。

表9‒5 pd_dbreuse_remaining_entriesの指定値ごとの,排他待ちの軽減効果

pd_dbreuse_remaining_entriesの指定値

排他待ちの軽減効果

ユーザ表

データディクショナリ表

ALL

×

×

ONLY_DIC

×

NONE

×

ONLY_USER

×

NOTHING

(凡例)

○:排他待ちの軽減効果があります(行識別子を再利用しません)。

×:排他待ちの軽減効果はありません(行識別子を再利用します)。

《適用基準》

インデクスに対する削除,又は挿入処理を行う場合,インデクスの削除によって発生する残存エントリを,新たに追加するキー値の挿入処理が再利用しようとしたときに,排他待ちが発生することがあります。このオペランドは,表の更新が発生するUAPを実行する場合,格納効率を下げてでも排他待ちが発生する可能性を下げるときに指定します。詳細は,マニュアル「HiRDB UAP開発ガイド」の「残存エントリによる排他待ちの回避(行識別子の再利用抑止)」を参照してください。

《指定値の目安》

通常,このオペランドを指定する必要はありません。

次のすべての条件を満たす場合に,このオペランドの指定を検討してください。

(a)ユーザ表の場合

  1. インデクスキー値無排他機能を適用(pd_indexlock_modeオペランドにNONEを指定)している場合

  2. 次のどちらかの条件に該当する場合

    ・UNIQUE又はPRIMARYを指定したインデクスを定義した表があるとき

    ・コミットしていない削除データの排他制御を(pd_lock_uncommited_delete_dataオペランドにWAITを指定)していて,システムにインデクスを定義した表が存在するとき

  3. 2.に該当するインデクスに対して,複数のトランザクションでINSERT文,UPDATE文,又はDELETE文を実行する場合

(b)データディクショナリ表の場合

  1. インデクスキー値無排他機能を適用(pd_indexlock_modeオペランドにNONEを指定)している場合

  2. 複数のトランザクションで,残存エントリによる排他待ちが発生する可能性がある操作(RDエリアの構成変更,又は,表,インデクスなどの定義変更)を実行する場合

なお,行識別子の再利用が抑止されるのは,上記(a)の1.と2.を満たしたユーザ表,及び,上記(b)の1.を満たしたデータディクショナリ表に対して,使用中ページに行を追加する操作が発生した場合だけです。それ以外の表や操作の場合,ALL以外を指定していても行識別子は再利用されます。

このオペランドの指定値による行識別子の割り当て方の変化,及び残存エントリによる排他待ち発生の流れについては,マニュアル「HiRDB UAP開発ガイド」の「残存エントリによる排他待ちの回避(行識別子の再利用抑止)」を参照してください。

《注意事項》
  • インデクスの残存エントリは,インデクスキー値無排他を適用している場合に,ユニークインデクスキーを更新,又は削除することで発生します。また,コミットしていない削除データの排他制御をしている場合は,通常のインデクスキーに対する更新,及び削除を行った場合も残存エントリが発生します。

  • このオペランドにALL以外を指定した場合,ページ内の管理領域が増えるため,格納効率が低下することがあります。そのため,このオペランドの指定値を変更した場合,表格納用RDエリア,及びインデクス格納用RDエリアの容量を再度見積もってください。見積もり式については,マニュアル「HiRDB システム導入・設計ガイド」の「表の格納ページ数の計算方法」及び「通常のデータディクショナリ用RDエリアの容量の見積もり」を参照してください。

    また,格納効率の低下を防ぐため,空きページ解放ユティリティ(pdreclaim)で,定期的に空きページの解放を行ってください。詳細は,マニュアル「HiRDB システム運用ガイド」の「使用中空きページの再利用」を参照してください。

    なお,格納効率が低下するケースについては,マニュアル「HiRDB UAP開発ガイド」の「残存エントリによる排他待ちの回避(行識別子の再利用抑止)」を参照してください。

  • このオペランドにALL以外を指定した場合でも,255個すべての行識別子が割り当て済みになると,ページ内に存在する残存エントリの中で行識別子の値が一番小さいものから順に再利用されます。このため,新たに追加するインデクスキー値の挿入処理が残存エントリの行識別子を再利用した際に,この残存エントリの排他が解除されていない場合(削除,又は更新を行ったトランザクションが未決着の場合),排他待ちが発生します。

    排他待ちを回避するには,空きページ解放ユティリティ(pdreclaim)で,定期的に空きページの解放を行ってください。詳細は,マニュアル「HiRDB システム運用ガイド」の「使用中空きページの再利用」を参照してください。

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_indexlock_mode

  • pd_lock_uncommited_delete_data

◆ pd_lck_deadlock_check = Y|N

デッドロックの発生を監視するかどうかを指定します。

Y:デッドロックの発生を監視します。

N:デッドロックの発生を監視しません。

《指定値の目安》

デッドロックが発生しない業務システムでは,このオペランドにNを指定するとSQLの実行性能が改善することがあります。特に,デッドロックの検出方法がインターバル監視方式の場合,排他制御用プールパーティション数が増加するとデッドロックを検出するたびに排他制御の性能が劣化することがあるため,デッドロックが発生しない業務システムを構築した上でこのオペランドにNを指定することをお勧めします。

デッドロックが発生する業務システムでは,このオペランドにYを指定してください。Nを指定すると,デッドロックが発生した場合,pd_lck_wait_timeoutオペランドに指定した時間が経過するまでSQLが終了しません。また,HiRDBがデッドロック情報を出力しないため,デッドロックが発生した要因が分からなくなるおそれがあります。

《注意事項》

このオペランドにNを指定すると,デッドロックが発生したトランザクションはエラーとなりません。この場合,トランザクションは次の要因でキャンセルされます。

  • 排他待ち時間を監視する最大時間が経過し,SQLがエラーリターンする

  • HiRDBクライアントの最大待ち時間が経過し,要求がUAPにエラーリターンする

《クライアント環境定義との関連》

このオペランドは次に示すクライアント環境定義と関連があります。

  • PDCWAITTIME

  • PDLCKWAITTIME

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_lck_deadlock_info

  • pd_lck_pool_partition

  • pd_fes_lck_pool_partition

  • pd_lck_deadlock_check_interval

  • pd_lck_wait_timeout

◆ pd_lck_deadlock_check_interval = デッドロック監視時間間隔

〜<符号なし整数>((1〜2000000000))《1000》(単位:ミリ秒)

インターバル監視方式でデッドロックの発生を監視する場合の,監視を実施する間隔を指定します。

《前提条件》

このオペランドの前提条件は,サーバ種別によって異なります。

シングルサーバ,バックエンドサーバ,又はディクショナリサーバの場合は,次に示す条件をすべて満たしている必要があります。

  • pd_lck_deadlock_checkオペランドにYを指定している

  • pd_lck_pool_partitionオペランドに2以上の値を指定している

フロントエンドサーバの場合は,次に示す条件をすべて満たしている必要があります。

  • pd_lck_deadlock_checkオペランドにYを指定している

  • pd_fes_lck_pool_partitionオペランドに2以上の値を指定している

《指定値の目安》

デッドロックが発生してから検出するまでの時間を短くしたい場合は,このオペランドの指定値を小さくしてください。

《注意事項》
  • このオペランドの指定値を小さくし過ぎると,システムのパフォーマンスが低下する場合があります。

  • このオペランドの指定値を大きくし過ぎると,次の要因でトランザクションがキャンセルされることがあります。

    ・排他待ち時間を監視する最大時間が経過し,SQLがエラーリターンする

    ・HiRDBクライアントの最大待ち時間が経過し,要求がUAPにエラーリターンする

《クライアント環境定義との関連》

このオペランドは次に示すクライアント環境定義と関連があります。

  • PDCWAITTIME

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_lck_deadlock_check

  • pd_lck_pool_partition

  • pd_fes_lck_pool_partition

  • pd_lck_wait_timeout

◆ pd_idx_without_rollback = Y|N

WITHOUT ROLLBACKオプション指定表のインデクス構成列の更新可否を指定します。

Y:WITHOUT ROLLBACKオプション指定表のインデクス構成列を更新できるようになります。

N:WITHOUT ROLLBACKオプション指定表のインデクス構成列を更新すると,次のようになります。

行の追加,削除:WITHOUT ROLLBACKオプションの機能が無効になります。行更新による行排他が残り,ロールバックでデータが戻ります。

行の更新:SQLエラーとなります。

《指定値の目安》

09-50以前の動作を前提にアプリケーションを作成している場合,このオペランドにNを指定してください。

《注意事項》
  • pdsetupコマンドに0904互換モードを指定した場合,このオペランドの省略値はNになります。

  • このオペランドにYを指定し,WITHOUT ROLLBACKオプション指定表のインデクス構成列を更新すると,1行の更新ごとにシステムログ量が312バイト増加します。システムログファイルの容量見積もり時に加算してください。

《ほかのオペランドとの関連》

このオペランドにYを指定する場合,pd_indexlock_modeオペランドにはNONEを指定してください。pd_indexlock_modeオペランドにKEYを指定した場合,pd_idx_without_rollbackオペランドにYを指定してもNを仮定します。

◆ pd_isolation_level = データ保証レベル

〜<符号なし整数>((0〜2))《2》

SQL文のデータ保証レベルを指定します。データ保証レベルとは,トランザクションのどの時点までデータの内容を保証するかのレベルのことをいいます。このオペランドは,SQL文に指定する排他オプションに相当します。

データ保証レベルの指定値については,マニュアル「HiRDB UAP開発ガイド」の「クライアント環境定義の設定内容」のPDISLLVLオペランドを参照してください。

《前提条件》

このオペランドのデータ保証レベルを有効にするためには,HiRDBクライアントのバージョン09-65以降を使用してHiRDBと接続してください。このオペランドは,HiRDBクライアントのバージョン09-65以降を使用している場合だけ有効です。HiRDBクライアントのバージョン09-60以前を使用した場合,このオペランドの値は無効となり,データ保証レベルは2となります。

◆ pd_unique_indexlock_info = Y|N

ユニークインデクスの残存エントリによる排他待ち情報(KFPH25005-Iメッセージ)の出力有無を設定します。

Y:KFPH25005-Iメッセージを出力します。

N:KFPH25005-Iメッセージを出力しません。

《指定値の目安》

通常はYを指定してください。KFPH25005-Iメッセージを抑止したい場合,Nを指定してください。

《ほかのオペランドとの関連》

このオペランドは次に示すオペランドと関連があります。

  • pd_indexlock_mode

◆ pd_unique_check_mode = 0 | 1

インデクスキー値無排他方式の,ユニークインデクスの一意性制約保証処理での排他制御方式を指定します。

このオペランドの指定値に1を指定すると,残存エントリによって待たされたり,デッドロックが発生したりすることがなくなります。

ユニークインデクスの一意性制約の保証処理及び残存エントリについては,マニュアル「HiRDB UAP開発ガイド」の「インデクスキー値無排他」を参照してください。

0:行排他だけでユニークインデクスの一意性制約保証を制御します。

1:行排他,トランザクション待ち用排他,ユニークチェック排他でユニークインデクスの一意性制約保証を制御します。

《指定値の目安》

複数のトランザクションで以下のどれかの運用を行う場合にこのオペランドに1を指定することを検討してください。

  • ユニークインデクスを定義している表で行の削除した後,削除したキー値を使って再挿入する。

  • ユニークインデクスのインデクス構成列を更新する。

  • RDエリアの構成変更(pdmod)や表やインデクスなどの定義変更を頻繁に行う。

《注意事項》

このオペランドの指定値に1を指定した場合,ユニークインデクスのキー値を削除するときにトランザクション待ち用排他とユニークチェック排他を取得します。そのため,必要な排他資源数を見積もった上で排他制御用プールサイズ(pd_lck_pool_size)を決定してください。

《ほかのオペランドとの関連》

このオペランドはpd_indexlock_modeオペランドにNONEを指定した場合に有効です。

《各見積もり式への影響》

pd_unique_check_modeオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • HiRDB/シングルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「ユニットコントローラが使用する共用メモリの計算式」

  • 「システムファイル及び監査証跡ファイルの容量の見積もり」

マニュアル「HiRDB システム定義」の「付録D 排他資源数の見積もり」