03.3 ENQされているリソースを求める(GQSCAN)

システム内でどのようなENQが発行されているかを知りたい場合があります。初期のMVSでは、ENQ情報はQCBとQELというコントロール・ブロックで管理され共通域に展開されていましたが、現在ではGRS(Global Resource Serialization)というコンポーネントによって管理され、ENQ情報もGRS空間にあります。そのため、従来のように共通域の制御表チェインをたどってENQされている資源を調べるような方法は採れなくなりました。代わりにGQSCANというサービスが提供されており、こちらを使用してシステム内のENQ情報を得ることができます。

GQSCANサービス

GQSCANは、OS内で発行されているENQに関する情報を返します。GQSCANを使うことによって、データセットなどシステム内のどの資源を誰が使用しているのか、誰が排他制御待ちになっているかなどを調べることができます。

発行されているENQの資源名リストを作る

ENQされているすべてのリソース(Q名とR名)およびENQ元ジョブ名を印刷するサンプルです。AREAパラメーターで返されるENQ情報を格納する領域を指定します。ENQ情報は、RIBおよびRIBEという制御表の形式で返されます(元の情報はGRS空間内にあります)。システム内でどれだけのENQが発行されているかはわかりません。そのため、RIB返答領域は適当な大きさで用意します。サンプルでは4KBですが、IBMの推奨最小サイズは1KBです。用意した領域に入りきらない場合、GQSCANは復帰コード8で完了します。この時、TOKENパラメーターで指定したフルワードに再開用のトークン値がセットされるので、次のGQSCANで続きのENQ情報を得ることができます。最後のRIBが返されると復帰コードは0になります。

GQSCANのパラメーター設定によって、競合しており排他制御待ちのタスクがいるリソース(データセットなど)だけを戻すようにすることもできます。それらの情報は、D GRS,CコマンドやISRDDN(DDLIST)ツールなどを利用すればプログラムを作るまでもありませんが、GQSCANを利用すれば似たようなツールを作ることも決して難しくはありません。

RIBとRIBE

RIBにはENQされている資源に関する情報、RIBEにはその資源を排他制御しているタスク(ジョブ)に関する情報が入ります。1つのENQリソースには、1つのRIBが作られます。共用ENQで複数のジョブやタスクがENQを保持していたり、排他ENQでも他のジョブやタスクがENQを要求して待ち状態になっている場合は、1つのRIBに複数のRIBEが作られます。AREAパラメーターで指定した領域に返されたRIBとRIBEの組み合わせをたどれば、ENQ情報を得ることができます。RIBとRIBEは、ISGRIBマクロによってマッピングすることができます。詳細はマニュアル「z/OS MVS:プログラミング:アセンブラー・サービスガイド」のリソース管理の章に記載されています。

Q名とR名で資源名リストをフィルターする

Q名のみ、もしくはQ名とR名の組み合わせでフィルターすることもできます。R名に関しては完全一致か、先頭が合っていればよいかの指定ができます。他にも、SCOPE(STEP、SYSTEM、SYSTEMS)、発行元システム名などでフィルターすることもできます。

ISGQUERYサービス

z/OS V1R6から提供されているGQSCANに代わる新たなサービスです。GQSCANは、非逐次化探索なので返答されたENQ情報は要求元によって変更されてしまっている場合がありますが、ISGQUERYではCMSEQDQロックを保持したまま発行できます。その他、GQSCANより機能や返される情報が増え、64ビット・アドレッシング・モードもサポートされています。GQSCANに相当するのがISGQUERY REQINFO=QSCANです。IBMは、GQSCANに代わりISGQUERYを推奨していますが、APIとしてはGQSCANより複雑です。最初はGQSCANで試してもいいでしょう。