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文字までの名前が表示されます。ただし、ファイル制御とアドレス エンキュー プールの要約レポートでは、エンキュー名の形式が異なります。

  • ファイル制御では、各種のロック用に6つのエンキュー プールを使用します。各エンキューの最初の4バイトには、制御ブロックのアドレスが含まれます(DSNBやFCTEなど)。エンキューがレコード ロックの場合は、このあとにレコード識別子も表示されます。

データセットまたはファイルの種類によって、エンキュー名の残りの部分が異なります。たとえば、RRDSの場合はRRN、KSDSデータセットの場合はレコード キーが続きます。これらの要約では、エンキュー名の残りの部分が、16進形式と文字形式の両方で表示されます。そのため、エンキュー名が1行ではなく2行で表示されます。

  • EXECADDRとKCADDRエンキュー プールの要約レポートには、エンキュー名が16進形式で表示されます。これは、エンキュー要求がアドレス上で行われるためです。

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進表示オプションを使用する必要があります。