ENQUEUE
タスクが回復可能な資源へのアクセスを要求し、その資源の待機(ロック)を他のタスクがすでに保持している場合、このタスクはエンキュー ドメインによって一時停止されます。回復可能資源に対しては、EXEC CICS ENQコマンドを使用しないでください。
タスクが待機しているエンキューの所有者は、次の2つの方法で確認できます。
-
CEMT INQUIRE UOWENQコマンドを使用する。CEMT INQUIRE UOWENQの詳細については、『CICS Supplied Transactions』を参照してください。
-
システム ダンプのNQセクションを使用する。一部のエンキュー待機については、CEMT INQUIRE UOWENQコマンドで表示できません。この場合は、システム ダンプを使用してエンキューの所有者を特定できます。詳細は、下記の「システム ダンプを使用したエンキュー待機の解決」を参照してください。CEMT INQUIRE UOWENQコマンドで情報が表示されないエンキュー待機の資源名を以下に示します。
JOURNALS
KCADDR
KCSTRNG
LOGSTRMS
エンキューの待機は、デッドロックが原因で発生する場合もあります。
システム ダンプを使用したエンキュー待機の解決
CEMT INQUIRE UOWENQコマンドでは、一部の資源タイプのエンキュー情報が戻されません。以下の表に、それらの資源について説明します。
資源名 |
資源の説明 |
JOURNALS |
ジャーナル エントリーの生成、削除、使用時に使われるCICSジャーナル名 |
KCADDR |
CICSが内部使用のためにロックしているアドレス |
KCSTRNG |
CICSが内部使用のためにロックしているストリング |
LOGSTRMS |
MVSロガーへのストリーム接続時に使用されるMVSログストリーム名。待機が長引いている場合は、ロガーに問題がある可能性があります。 |
タスクがこれらの資源のエンキューを待機しているかどうかは、システム ダンプのNQセクションを使用して確認できます。他の資源タイプのエンキューの待機についてもシステム ダンプで確認できますが、INQUIRE UOWENQコマンドを使用する方が便利です。
CICSは、エンキューの取得が可能な資源タイプごとに別個のエンキュー プールを保持します。各エンキュー プールの要約を出力するには、ダンプのフォーマット キーワードNQに「1」を指定します(ダンプのフォーマット キーワードの詳細については、『CICS Operations and Utilities Guide』を参照してください)。以下の例は、一時データのエンキュー プール(TDNQ)の要約を示しています。
==NQ: ENQUEUE POOL SUMMARY - TDNQ
Default shunt action: |
Retain |
*Total enqueue requests: |
34 |
*Total requests that have waited: |
8 |
*Total requests failed busy: |
6 |
*Total requests failed locked |
2 |
*Total requests timed out: |
1 |
*Total enqueues that were retained: |
1 |
*NOTE: These values were reset at 15.44.39 (the last statistics interval collection)
以下の例は、上記のTDNQプールの要約情報を表示しているシステム ダンプです。
==NQ: ENQUEUE POOL SUMMARY - TDNQ
Default shunt action: Retain
*Total enqueue requests: 34
*Total requests that have waited: 8
*Total requests failed busy: 6
*Total requests failed locked: 2
*Total requests timed out: 1
*Total enqueues that were retained: 1
*NOTE: These values were reset at 15.44.39 (the last statistics interval collection)
OWNER / WAITER
NQEA Tran Tran Lifetime Hash
Enqueue Name Len Sta Address Id Num Local Uowid Uow Tsk Indx
------------ --------------- -- --- ----- ----- --- --- -----
Q007TOQ 9 Act 052C4580 TDWR 00356 A8EBC70A534BC82 1 0 13
Q002FROMQ 9 Act 053D0880 TDRD 00435 A8EBD91A579B7D2 2 0 24
Waiter : 0540BBC0 TDRD 00467 A8EBDAC692B7C10 0 1 24
Waiter : 0537CE70 TDDL 00512 A8EBDAE6FFB56F2 1 0 24
Q007FROMQ 9 Act 0540CC80 ENQY 00217 A8EBB7FE2367C44 0 1 51
Waiter : 0538F320 ENQY 00265 A8EBBF084600FC0 0 1 51
Waiter : 0518C5C0 ENQY 00322 A8EBC393B9C66D8 0 1 51
Q002TOQ 9 Ret 0520B260 ---- ----- A8EBD82AFD4CD82 1 0 53
Q009FROMQ 9 Act 0540A140 TDRD 00366 A8EBC84D3F80250 1 0 62
下方の表では、各行にプール中のエンキューが1つずつ表示されています。エンキューを待機している要求がある場合は、そのエンキュー行に続く行に順番に表示されます。待機中の要求は、「Waiter」という文字列で示されています。上の表で使用されている見出しの意味は以下のとおりです。
Enqueue |
エンキューされているストリング。通常、最大半角30文字までの名前が表示されます。ただし、ファイル制御とアドレス エンキュー プールの要約レポートでは、エンキュー名の形式が異なります。
データセットまたはファイルの種類によって、エンキュー名の残りの部分が異なります。たとえば、RRDSの場合はRRN、KSDSデータセットの場合はレコード キーが続きます。これらの要約では、エンキュー名の残りの部分が、16進形式と文字形式の両方で表示されます。そのため、エンキュー名が1行ではなく2行で表示されます。
|
Len |
エンキュー名の長さ。 |
Sta |
エンキューの状態。このフィールドには、以下のいずれかが表示されます。 Act - エンキューはアクティブです。つまり、他のトランザクションがこのエンキューを待機できます。 Ret - エンキューは保留状態です。つまり、他のトランザクションはこのエンキューを待機できません。通常、この状態は、待避中(shunted)の作業単位(UOW)がエンキューを所有している場合に発生します。 |
NQEA Address |
エンキューの所有者またはそのエンキューを待機している要求(Waiter)に対応するNQEAのアドレス。エンキュー名が長すぎてすべて表示されなかった場合は、NQEAにエンキューの完全名が含まれています。 |
TranId |
エンキューの所有者またはそのエンキューを待機している要求のトランザクション識別子。待避中(shunted)のUOWがエンキューを所有している場合は、このフィールドに「----」と表示されます。 |
TranNum |
エンキューの所有者またはそのエンキューを待機している要求のタスク番号。待避中(shunted)のUOWがエンキューを所有している場合は、このフィールドに「-----」と表示されます。 |
Local Uowid |
エンキューの所有者またはそのエンキューを待機している要求のローカルUOW識別子。 |
Uow Lifetime |
エンキューの所有者については、そのUOWの存続期間内にエンキューを所有した回数。エンキューを待機している要求については、そのUOWの存続期間内にエンキューを要求したかどうか。 |
Tsk Lifetime |
エンキューの所有者については、そのタスクの存続期間内にエンキューを所有した回数。エンキューを待機している要求については、そのタスクの存続期間内にエンキューを要求したかどうか。 |
Hash Indx |
プールの内部ハッシュ テーブルへの索引。 |
EXEC CICS ENQの待機
これは、エンキューの待機の特別なケースです。アプリケーションが回復可能な資源のエンキューを獲得するEXEC CICS ENQコマンドを発行し、その資源のエンキューを他のタスクがすでに保持していた場合に発生します。
資源名がEXECADDRの場合は、EXEC CICS ENQコマンドのLENGTHオプションが省略されたことを示します。つまり、RESOURCEオプションに、エンキューを取得する資源のアドレスが指定されました。
資源名がEXECSTRNの場合は、EXEC CICS ENQコマンドのLENGTHオプションが指定されたことを示します。つまり、RESOURCEオプションに、エンキューを取得する資源の名前が指定されました。EXEC CICS ENQコマンドの詳細については、『CICS Application Programming Reference』を参照してください。
資源名がEXECSTRNの場合は、EXEC CICSシスプレックスENQコマンドのLENGTHオプションが指定されたことを示します。つまり、RESOURCEオプションに、エンキューを取得する資源の名前が指定されました。EXEC CICS ENQコマンドの詳細については、『CICS Application Programming Reference』を参照してください。
CEMT INQUIRE UOWENQコマンドを使用すると、一時停止中のタスクが待機しているエンキューの所有者を確認できます。ただし、資源タイプEXECADDRの待機については、EXEC CICS ENQコマンドで指定した資源のアドレスを表示するには、CEMTの16進表示オプションを使用する必要があります。