8.7.1 排他資源管理テーブル不足が発生した場合の対処方法
実行者 HiRDB管理者
排他資源管理テーブル不足が発生すると,HiRDBはKFPS00443-Iメッセージと,排他資源管理テーブル情報を出力します。排他資源管理テーブル情報は,排他資源管理テーブル不足が発生したユニットのディレクトリ(%PDDIR%\spool\pdlckinf)に出力されます。HiRDB管理者はその情報を参照して,排他資源管理テーブル不足解消のための対策を立ててください。
注 排他制御処理の分散を適用している場合は,「排他資源管理テーブル」を「排他制御用プールパーティション」に読み替えてください。
- 〈この項の構成〉
(1) 排他資源管理テーブル情報のファイル名は
排他資源管理テーブル情報は,排他資源管理テーブル不足が発生するたびにファイルに出力されます。出力ファイル名は,「出力日時.mem」となります。memはファイル記述子です。例えば,10月3日9時16分2秒に,排他資源管理テーブル不足が発生すると,その出力ファイル名はOct3091602.memとなります。ファイル名は,KFPS00447-Iメッセージに表示されます。
(2) 不要な排他資源管理テーブル情報ファイルを削除しましょう
HiRDB管理者は不要となった排他資源管理テーブル情報ファイルを次に示す(a),(b)又は(c)の方法で削除してください。
(a) HiRDBのコマンドで削除する方法
pdcspoolコマンドで削除します。pdcspoolコマンドを実行すると,%PDDIR%¥spool下にあるトラブルシュート情報ファイルが削除されます。したがって,排他資源管理テーブル情報ファイルだけを削除する場合は,「OSの機能で削除する方法」を参照してください。
(b) HiRDBの機能で削除する方法
pd_spool_cleanup_interval_levelオペランドを省略するかallを指定すると,定期的にHiRDBが排他資源管理テーブル情報ファイルを削除します。通常は24時間ごとに削除します。この削除間隔をpd_spool_cleanup_intervalオペランドで変更できます。
また,pd_spool_cleanup_levelオペランドを省略するかallを指定すると,HiRDBの開始時にHiRDBが排他資源管理テーブル情報ファイルを削除します。
(c) OSの機能で削除する方法
OSの機能(OSのdelコマンドなど)で削除してください。delコマンドについては,OSのマニュアルを参照してください。
(3) 排他資源管理テーブル情報の出力内容
排他資源管理テーブル情報の出力内容を次の図に示します。
- 〔説明〕
-
(1)排他資源管理テーブル不足の検知日時(月 日 時:分:秒 西暦)
(2)不足した排他資源管理テーブルの種別(次のどちらかを出力します)
-
RESOURCE
使用する資源名称を管理するときに使用するテーブルです。複数ユーザで共有します。そのため,全ユーザの使用しているテーブルの合計数がテーブルの総数を超えることがあります。
-
OCP/WAIT
共有,待ちの状態を管理するときに使用するテーブルです。複数ユーザで共有しません。
RESOURCEとOCP/WAITの違いを次に示します。
(3)使用できる排他資源管理テーブルの総数
-
- 排他資源管理テーブル不足が発生したユーザの情報
-
(4)UAP識別情報 ※1
(5)サーバ名
(6)プロセスID
(7)トランザクション識別子
(8)ユーザ識別通番
(9)デッドロックプライオリティ値
(10)クライアントのIPアドレス ※3
(11)クライアントのプロセスID ※2,※3
(12)現在使用しているテーブル数
- 排他資源管理テーブル不足が発生したときのほかのユーザの情報(排他資源管理テーブル使用率が10%以上のユーザ)
-
(13)UAP識別情報 ※1
(14)サーバ名
(15)プロセスID
(16)トランザクション識別子
(17)ユーザ識別通番
(18)デッドロックプライオリティ値
(19)クライアントのIPアドレス ※3
(20)クライアントのプロセスID ※2,※3
(21)現在使用しているテーブル数
- 排他資源管理テーブル不足が発生したときのほかのユーザの情報(排他資源管理テーブル使用率が10%未満のユーザ)
-
(22)排他資源管理テーブルの使用率が10%に満たないユーザの数
- 注※1
-
CONNECTしていたクライアントUAPの名称を30バイトで表示します。
ここで表示する情報はpdls -d prcやpdls -d trnで出力されるPROGRAMに該当します。ただし,一部のユティリティは表示できません。この場合,「********」が表示されます。また,再開始処理でトランザクションを回復中のときは”Rerun”を表示します。
- 注※2
-
CONNECTしていたクライアントUAPがリンケージしているクライアントライブラリのバージョンがHiRDB Version 4.0 04-00より前の場合,及びType4 JDBCドライバから接続している場合は,プロセスIDに0が表示されます。
- 注※3
-
バックエンドサーバ及びディクショナリサーバでは,表示できないことがあります。表示できない場合,クライアントのIPアドレスは「*.*.*.*」,プロセスIDは0を表示します。
(4) 調査方法
排他資源管理テーブル情報の次の情報を参照します。
-
(3)使用できる排他資源管理テーブルの総数
-
(21)現在使用しているテーブル数
この情報から,どのUAPがどれだけの排他資源管理テーブルを使用しているかが分かります。排他資源管理テーブルの使用数は,UAPが行う排他要求数と一致します。したがって,「(21)現在使用しているテーブル数」の値が大きいUAPは,不当に多くの排他要求をしている可能性があります。UAPが行う排他要求数はSQLによって異なります。各SQLの排他要求数(排他資源数の見積もり)については,マニュアル「HiRDB システム定義」を参照してください。
(5) 対策方法
(a) 不当に多くの排他要求を行っているUAPがある場合
多くの排他要求をしないようにUAPを修正してください。
また,クライアント環境定義のPDLOCKLIMITオペランドを指定すると,1UAPの排他要求数の上限を設定できます。
(b) 不当に多くの排他要求を行っているUAPがない場合
排他資源管理テーブル数が少な過ぎると思われます。次に示すどちらかの対策をとってください。
- ●ユニットで使用する共用メモリに余裕がない場合(共用メモリを大きくできない場合)
-
排他資源管理テーブル数をたくさん使用するUAPを同時に実行しないでください。
- ●ユニットで使用する共用メモリに余裕がある場合(共用メモリを大きくできる場合)
-
HiRDBシステム定義を修正します。修正するオペランドはサーバの種類によって異なります。排他資源管理テーブルが不足したサーバは,排他資源管理テーブル情報の「(5)サーバ名」を参照すれば分かります。
排他資源管理テーブルが不足したサーバがフロントエンドサーバの場合は,エラーが発生したフロントエンドサーバ定義のpd_fes_lck_pool_sizeオペランドの値を大きくしてください。
排他資源管理テーブルが不足したサーバがフロントエンドサーバ以外の場合は,エラーが発生したサーバ定義のpd_lck_pool_sizeオペランドの値を大きくしてください。
- 注意事項
-
HiRDBシステム定義を変更する場合は,HiRDB全体又は変更する定義があるユニットを正常終了させてください。その後,HiRDBシステム定義を変更してください。pdstop -sで該当するサーバだけを正常終了させても変更した定義は有効になりません。