スケーラブルデータベースサーバ HiRDB Version 8 システム定義(Windows(R)用)

[目次][索引][前へ][次へ]

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

80) pd_lck_deadlock_info = Y | N
デッドロック情報タイムアウト情報,及び排他資源管理テーブル情報を出力するかどうかを指定します。デッドロック情報,タイムアウト情報,及び排他資源管理テーブル情報は,%PDDIR%\spool\pdlckinf下に出力されます。デッドロック情報,タイムアウト情報,及び排他資源管理テーブル情報については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
Y:デッドロック情報,タイムアウト情報,及び排他資源管理テーブル情報を出力します。
N:デッドロック情報,タイムアウト情報,及び排他資源管理テーブル情報を出力しません。
《ほかのオペランドとの関連》
  • pd_lck_deadlock_checkオペランドにNを指定した場合は,このオペランドには常にNが仮定されます。
  • このオペランドはpd_lck_deadlock_checkオペランドと関連があります。

 

81) pd_lck_wait_timeout = 排他待ち限界経過時間
〜<符号なし整数>((0〜65535))《Max(180,pd_watch_timeの値)》(単位:秒)
排他待ち時間を監視する最大時間を秒単位で指定します。排他待ち時間とは,排他要求が待ち状態になってから解除されるまでの時間のことです。
指定した時間内に待ち状態が解除されない場合,SQLはエラーリターンします。0を指定した場合,排他待ち時間を監視しないで,待ち状態が解除されるまで待ち続けます。
《注意事項》
このオペランドを省略すると,pd_watch_timeオペランドの値が省略値として仮定されることがあります。pd_watch_timeオペランドはHiRDB/シングルサーバに指定しても無効になりますが,pd_lck_wait_timeoutオペランドの省略値に使用されることがあります。このため,HiRDB/シングルサーバの場合はpd_watch_timeオペランドを省略することをお勧めします。
《クライアント環境定義との関連》
このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDLCKWAITTIMEを指定してください。PDLCKWAITTIMEについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
《ほかのオペランドとの関連》
  • pd_sysdef_default_optionオペランドにv6compatibleを指定している場合,このオペランドの省略値は180になります。
  • このオペランドは,次に示すオペランドと関連があります。
    ・pd_lck_deadlock_check
    ・pd_lck_deadlock_check_interval

 

82) pd_lck_release_detect = interval | pipe
このオペランドでは,HiRDBが排他の解除を検知する方法(資源を占有している処理が,資源の占有を解除したかどうかを知る方法)について指定します。
interval:一定間隔で排他管理用領域を参照して排他解除状態を調べます。
pipe:pipeファイル(プロセス間通信のパイプ)を使用して排他解除通知を受け取ります。
省略値はHiRDB/シングルサーバの場合はpipeが,HiRDB/パラレルサーバの場合はintervalが仮定されます。
《指定値の目安》
このオペランドの指定値を変更するときの目安を次に示します。
指定値 HiRDBの処理方式 利点・適用基準
interval 共用メモリにある排他管理用領域を参照して,排他が解除されたかどうかを検知します。HiRDBは排他管理用領域を一定間隔(一定のインターバル)で参照しています。インターバル時間は,pd_lck_release_detect_intervalオペランドで指定します。 資源を占有している処理が排他を解除しても,次の排他管理用領域の参照時までそれを検知できません。このため,1トランザクションの処理時間が短いUAPでは,排他待ち時間が長くなることがあります。ただし,この待ちではCPUに負荷を掛けたり,ファイルをオープンしたりしません。
pd_lck_release_detect_intervalオペランドに小さい値を指定すると,CPU利用率が上がり過ぎてスループットが伸びないことがあります。低速なCPUを使用している場合に,CPU負荷を軽減する効果があります。
pipe セマフォを使用して排他が解除されたかどうかを検知します。資源を占有している処理から排他待ちをしている処理に排他解除が通知されます。排他占有プロセスが排他を解除した時点で,排他待ちプロセスは排他の解除を検知できます。
  • 1トランザクションの処理時間がpd_lck_release_detect_intervalオペランドの値以下の場合は,スループットが向上します。
  • 排他待ちが多発した場合,CPUに負荷が掛かります。
  • 高速なCPUを使用している場合は,スループットを向上させる効果があります。

 

83) pd_lck_release_detect_interval = 排他解除検知インターバル時間
〜<符号なし整数>((1〜1000))《10》(単位:ミリ秒)
排他管理用領域の参照は一定のインターバルをおいて行われます。このオペランドにはそのインターバル時間を指定します。
・このオペランドに49以下を指定した場合
インターバル時間はこのオペランドで指定した値から始まり,最大50ミリ秒になります。
・このオペランドに50以上を指定した場合
インターバル時間は50ミリ秒から始まり,最大このオペランドで指定した値になります。
《前提条件》
pd_lck_release_detectオペランドにintervalを指定している必要があります。
なお,HiRDB/パラレルサーバの場合はintervalが省略値です。
《指定値の目安》
  • 基本的にはこのオペランドを省略してください。
    短時間の間に排他が多発し,排他獲得待ちが発生しているため,トランザクション処理性能が大幅に低下している場合に指定値の変更を検討してください。
  • 指定値を小さくすると,排他待ちが多発したときにCPUに負荷が掛かります。
  • 指定値を大きくすると,排他待ち時間が長くなることがあります。
  • 統計解析ユティリティのシステムの稼働に関する統計情報の「排他待ち時間(WAIT TIME)」を参考にして指定値を決定してください。統計情報に出力された排他待ち時間がこのオペランドの値に比べて短い場合は,このオペランドの値を小さくしてください。

 

84) 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バイト増加します。

 

85) pd_lck_queue_limit = 排他待ちユーザ数警告メッセージ出力契機
〜<符号なし整数>((0〜500))《10》
同一リソースへの排他処理で,排他待ちユーザ数が多数発生したとき,警告メッセージを出力する境界となる排他待ちユーザ数を指定します。
同一リソースでの排他待ちユーザ数が指定値に達すると,警告メッセージ(KFPS00446-W)を出力します。メッセージの出力先は,メッセージログファイル及びイベントログです。
指定値が0の時は,警告メッセージを出力しません。

 

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

 

87) pd_command_deadlock_priority = 32 | 64 | 96 | 120
コマンドのデッドロックプライオリティ値を指定します。
このオペランドの指定値が有効になる運用コマンドを次に示します。
  • pdhold -b(バックアップ閉塞)
コマンドのデッドロックプライオリティ値を変更する方法についてはマニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
《前提条件》
pd_deadlock_priority_useオペランドにYが指定されている必要があります。
《指定値の目安》
デッドロック発生時,業務プログラム側でリトライ可能なシステムの場合,運用コマンドの優先度を高くして業務プログラム側をエラーにできます。指定する値が小さいほど排他時の優先度は高くなります。

 

88) pd_key_resource_type = TYPE1 | TYPE2
インデクスキー値の排他資源の作成方法を指定します。インデクスキー値の排他資源の作成方法については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
TYPE1:インデクスキー値の排他資源をビットシフトしながら排他的論理和で作成します。
TYPE2:インデクスキー値の排他資源をバイトオーダの排他的論理和で作成します。
《指定値の目安》
  • 通常はTYPE1を指定します。キー長が10バイトを超える場合,インデクスキー値の排他資源でシノニムによる排他競合が発生することがあります。TYPE1を指定すると,これを防止できます。
  • TYPE2は,HiRDB Version 5.0 05-02又はHiRDB Version 4.0 04-05より前の処理方式です。バージョンアップしたユーザで,以前の処理方式でインデクスキー値の排他資源でシノニムによる排他競合が発生していなかった場合は,TYPE2を指定してください。
  • インデクスの構成列に文字列データを含む場合にはTYPE1を指定します。
  • インデクスの構成列に数値データを含む場合にはTYPE2を指定します。

 

89) pd_indexlock_mode ={KEY|NONE
B-treeインデクスの排他制御方式を指定します。
KEY:インデクスキー値で排他をします。
NONE:インデクスキー値で排他をしません(インデクスキー値無排他を実施します)。
インデクスキー値無排他については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
《ほかのオペランドとの関連》
このオペランドはpd_lock_uncommited_delete_dataオペランドと関連があります。詳細については,pd_lock_uncommited_delete_dataオペランドの説明を参照してください。

 

90) pd_lock_uncommited_delete_data = WAIT | NOWAIT
コミットしていない削除データの排他待ち制御方式を指定します。
WAIT:
DELETE文で削除した行,又はUPDATE文で更新した更新前のインデクスキーに対し,検索時に削除又は更新したトランザクションが決着するまで排他待ちし,トランザクション決着後のデータを基に検索結果を返す方式を指定します。また,インデクスキー値排他と同じ方式で一意性制約が保証されます。インデクスキー値排他については,マニュアル「HiRDB Version 8 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を初期化してから再度オペランドを指定してください。

 

91) pd_lck_deadlock_check = Y | N
デッドロックの発生を監視するかどうかを指定します。
Y:デッドロックの発生を監視します。
N:デッドロックの発生を監視しません。
《指定時の目安》
デッドロックが発生しない業務システムでは,このオペランドにNを指定するとSQLの実行性能が改善することがあります。特に,デッドロックの検出方法がインターバル監視方式の場合,排他制御用プールパーティション数が増加するとデッドロックを検出するたびに排他制御の性能が劣化することがあるため,デッドロックが発生しない業務システムを構築した上でこのオペランドにNを指定することをお勧めします。
デッドロックが発生する業務システムでは,このオペランドにYを指定してください。Nを指定すると,デッドロックが発生した場合,pd_lck_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

 

92) 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