Skip to main content

ロック・テーブルの管理

ここでは、インターシステムズ製品でロック・テーブルを表示および管理するためのツールについて説明します ("ロックの監視" も参照してください)。

ロック・テーブルの管理のための使用可能ツール

ロックを表示し、(場合によっては) 削除することが必要なこともあります。このために、インターシステムズでは、以下のツールが用意されています。

最後の 2 つのクラスの詳細は、クラス・リファレンスを参照してください。

管理ポータルでのロックの表示

管理ポータルを使用すれば、システム全体で現在保持または要求 (待機) されているすべてのロックを表示できます。管理ポータルで、[システムオペレーション][ロック][ロック表示] の順に選択します。[ロック表示] ウィンドウには、ディレクトリごとのアルファベット順で ([ディレクトリ])、なおかつ各ディレクトリ内にはロック名による照合順で([リファレンス])、ロック (およびロック要求) の一覧が表示されます。各ロックはプロセス ID ([所有者]) で特定され、プロセスの作成時にオペレーティング・システムにより付与されるユーザ名 (OS User Name) を表示し、[モードカウント] (ロック・モードおよびロック・インクリメント・カウント) を有します。ロックおよびロック要求の最新リストを表示させるためには、[再表示] アイコンを使用する必要があります。このインタフェースの詳細は、"ロックの監視" を参照してください。

[ModeCount] は、特定の [リファレンス] についての特定の [所有者] プロセスによって、保持されたロックを指定することができます。以下は、保持されたロックに対する [ModeCount] 値の例です。

ModeCount 説明
Exclusive 排他ロック、非エスカレート (LOCK +^a(1))
Shared 共有ロック、非エスカレート (LOCK +^a(1)#"S")
Exclusive_e 排他ロック、エスカレート (LOCK +^a(1)#"E")
Shared_e 共有ロック、エスカレート (LOCK +^a(1)#"SE")
Exclusive->Delock ロック解除状態にある排他ロック。ロックはアンロックされていますが、現在のトランザクションの終了までロックの解除が延期されます。これは、標準のアンロック (LOCK -^a(1)) または遅延アンロック LOCK -^a(1)#"D") により発生できます。
Exclusive,Shared 共有ロックと排他ロックの両方 (いずれの順序でも適用)。エスカレート・ロックも指定可能です。例 :Exclusive_e,Shared_e
Exclusive/n 増分排他ロック (LOCK +^a(1)n 回発行される)。ロック・カウントが 1 の場合、カウントは表示されません (ただし、以下参照のこと)。増分共有ロックも指定可能です。例 :Shared/2
Exclusive/n->Delock ロック解除状態にあるインクリメンタル排他ロック。ロックのインクリメントはすべてアンロックされていますが、現在のトランザクションの終了までロックの解除が延期されます。トランザクション内で、個々のインクリメントをアンロックすることで、これらのインクリメントはすぐに解除されます。ロックは、ロック・カウントが 1 のときにアンロックが発行されるまで、ロック解除状態になりません。この ModeCount 値 (ロック解除状態のインクリメンタル・ロック) は、それより前のすべてのロックが単独の操作 (引数なしの LOCK コマンドまたはロック・オペレーション・インジケータ (LOCK ^xyz(1)) のないロックのどちらか) によってアンロックされたときに発生します。
Exclusive/1+1e 2 つの排他ロック。一方は非エスカレートで、もう一方はエスカレートです。インクリメント・カウントはこれら 2 種類の排他ロックに対して別々に維持します。共有ロックも指定可能です。例 :Shared/1+1e
Exclusive/n,Shared/m 共有ロックと排他ロックの両方。ともに整数インクリメントとなります。

保持されたロック [ModeCount] は、インクリメントの有無にかかわらず、共有または排他、エスカレートまたは非エスカレートのロックのあらゆる組み合わせを表すことができます。排他ロックまたは共有ロック (エスカレートまたは非エスカレート) はロック解除状態にすることができます。

[ModeCount] によって、WaitExclusiveExact などのロック待機プロセスを指定することが可能です。以下は、待機ロック要求に対する [ModeCount] の値です。

ModeCount 説明
WaitSharedExact 保持または事前に要求されたまったくの同一ロックに対する共有ロックの待機 :LOCK +^a(1,2)#"S" はロック ^a(1,2) に対する待機となります。
WaitExclusiveExact 保持または事前に要求されたまったくの同一ロックに対する排他ロックの待機 :LOCK +^a(1,2) はロック ^a(1,2) に対する待機となります。
WaitSharedParent 保持または事前に要求されたロックの親に対する共有ロックの待機 :LOCK +^a(1)#"S" はロック ^a(1,2) に対する待機となります。
WaitExclusiveParent 保持または事前に要求されたロックの親に対する排他ロックの待機 :LOCK +^a(1) はロック ^a(1,2) に対する待機となります。
WaitSharedChild 保持または事前に要求されたロックの子に対する共有ロックの待機 :LOCK +^a(1,2)#"S" はロック ^a(1) に対する待機となります。
WaitExclusiveChild 保持または事前に要求されたロックの子に対する排他ロックの待機 :LOCK +^a(1,2) はロック ^a(1) に対する待機となります。

[ModeCount] によって、ロック要求をブロックしているロック (またはロック要求) を指定します。これは必ずしも [リファレンス] と同じではなく、ロック・キュー先頭で現在保持されているロックを指定します。このロック・キューには当ロック要求が待機しています。[リファレンス] は必ずしも、このロック要求を即座にブロックする被要求ロックを指定するものではありません。

[ModeCount] は、特定の [リファレンス] についての特定の [所有者] プロセスに対するその他のロック・ステータス値を指定することができます。以下は、それらのその他の [ModeCount] ステータス値です。

ModeCount 説明
LockPending 排他ロックの保留中です。サーバが排他ロックの付与プロセス中にある場合に、このステータスが発生することがあります。ロック・ペンディングの状態のロックは削除できません。
SharePending 共有ロックの保留中です。サーバが共有ロックの付与プロセス中にある場合に、このステータスが発生することがあります。ロック・ペンディングの状態のロックは削除できません。
DelockPending アンロックの保留中です。サーバが保持ロックのアンロック・プロセス中にある場合に、このステータスが発生することがあります。ロック・ペンディングの状態のロックは削除できません。
Lost ネットワークがリセットされたため、ロックが失われました。

[所有者のルーチン情報を表示] を選択して [ルーチン] 列を有効にします。これにより、所有者のプロセスが実行しているルーチンの名前が、そのルーチンで実行されている現在の行の番号が先頭に追加されて表示されます。

[SQL オプションを表示] を選択し、[ネームスペースのSQLテーブル名を表示] リストからネームスペースを選択して [SQL テーブル名] 列を有効にします。この列には、選択したネームスペースにある各プロセスに関連付けられた SQL テーブルの名前が表示されます。プロセスが SQL テーブルと関連付けられていない場合、この列の値は空になります。

[ロック表示] ウィンドウを使用して、ロックを削除することはできません。

管理ポータルでのロックの削除

Important:

ロックを削除するのではなく、ベスト・プラクティスとして、ロックを作成したプロセスを特定し、それを終了します。ロックを削除すると、そのロックの目的によっては、システムに重大な影響を与える可能性があります。

システム上で現在保持されているロックを削除するには、管理ポータルに移動して、[システムオペレーション][ロック][ロックを管理] の順に選択します。任意のプロセス ([所有者]) について、[削除] または [プロセスが保持するすべてのロックを削除] をクリックします。

ロックの削除により、全形式の該当ロック (すべてのインクリメント・レベルのロック、すべての排他、排他エスカレート、および共有バージョンのロック) が解放となります。1 つのロックを削除すると、そのロック・キューで待機している次のロックが即座に適用となります。

また、SYS.Lock.DeleteOneLock()Opens in a new tab および SYS.Lock.DeleteAllLocks()Opens in a new tab メソッドを使用して、ロックを削除することもできます。

ロックを削除するには、WRITE 権限が必要になります。ロックの削除は、監査データベースに記録されます (有効になっている場合)。messages.log には記録されません。

^LOCKTAB ユーティリティ

また、%SYS ネームスペースから ^LOCKTAB ユーティリティを使用して、ロックを表示および削除することもできます。

Important:

ロックを削除するのではなく、ベスト・プラクティスとして、ロックを作成したプロセスを特定し、それを終了します。ロックを削除すると、そのロックの目的によっては、システムに重大な影響を与える可能性があります。

^LOCKTAB は、以下の形式のいずれかで実行できます。

  • DO ^LOCKTAB : ロックを表示および削除できます。個々のロックの削除、指定のプロセスが所有しているすべてのロックの削除、またはシステム上のすべてのロックの削除を行う文字コード・コマンドが用意されています。

  • DO View^LOCKTAB : ロックを表示できます。ロックを削除するオプションは用意されていません。

これらのユーティリティ名は、大文字と小文字が区別されることに注意してください。

以下のターミナル・セッション例は、^LOCKTAB が現在のロックを表示する方法を示しています。

%SYS>DO ^LOCKTAB

                                   Node Name: MYCOMPUTER
                   LOCK table entries at 07:22AM  01/13/2018
                 16767056 bytes usable, 16774512 bytes available.
 
Entry Process     X#   S# Flg   W# Item Locked
   1) 4900         1               ^["^^c:\intersystems\iris\mgr\"]%SYS("CSP","Daemon")
   2) 4856         1               ^["^^c:\intersystems\iris\mgr\"]ISC.LMFMON("License Monitor")
   3) 5016         1               ^["^^c:\intersystems\iris\mgr\"]ISC.Monitor.System
   4) 5024         1               ^["^^c:\intersystems\iris\mgr\"]TASKMGR
   5) 6796         1               ^["^^c:\intersystems\iris\mgr\user\"]a(1)
   6) 6796        1e               ^["^^c:\intersystems\iris\mgr\user\"]a(1,1)
   7) 6796              2        1 ^["^^c:\intersystems\iris\mgr\user\"]b(1)Waiters: 3120(XC)
   8) 3120         2               ^["^^c:\intersystems\iris\mgr\user\"]c(1)
   9) 2024         1    1          ^["^^c:\intersystems\iris\mgr\user\"]d(1)
 
Command=>

^LOCKTAB の表示では、保持された排他ロックを X# 列がリストして、保持された共有ロックを S# 列がリストします。X# または S# の数字は、ロック・インクリメント・カウントを示します。“e” 接尾語は、ロックがエスカレートとして定義されていることを示します。“D” 接尾語は、ロックがロック解除状態であることを示します。ロックはアンロックされていますが、現在のトランザクションの終了まで別のプロセスが使用することはできません。W# 列では待機ロック要求の数をリストします。上記の表示で示すように、process 6796 は増分共有ロック ^b(1) を保持しています。Process 3120 はこのロックを待つロック要求を 1 つ有しています。このロック要求は、^b(1) の子 (C) に対する排他 (X) ロックのためにあります。

このユーティリティのヘルプを表示するには、Command=> プロンプトで疑問符 (?) を入力します。これには、この表示の解読方法およびロックを削除する文字コード・コマンド (ある場合) についての詳細が含まれています。

Note:

Flg 列の値で示されるように、ロック保留状態にあるロックは削除できません。

^LOCKTAB ユーティリティを終了するには Q を入力します。

関連項目

FeedbackOpens in a new tab