・sp_whoシステムストアドプロシージャによるロックの状況確認
sp_whoシステムストアドプロシージャを利用すると,どのプロセスがリソースをブロックしているのかを調べることができる。
Fig.9-43 sp_whoシステムストアドプロシージャの実行例
blkデータ列に表示されている値は,そのプロセスがブロックしているプロセスIDを示す(0の場合はブロックしていないことを表す)。
Table 9-3 sp_whoシステムストアドプロシージャで出力されるデータ列
| 列名 | 解説 |
| spid | サーバープロセスID |
| status | プロセスの状態を示す sleeping:現在停止していることを示す runnable:実行可能状態にあることを示す |
| loginame | ログインIDを示す |
| hostname | ホスト名を示す |
| blk | このプロセスがブロックしているプロセスIDを示す |
| abname | データベース名を示す |
| cmd | 実行中のコマンド,スレッド名,コマンド待ち状態などを示す |
・SQL Server Enterprise Managerによるロック状況の確認
SQL Server Enterprise Managerを利用してブロックの状況を確認するには,コンソールツリーから[管理]−[現在の利用状況]を開く。オブジェクトから調べる場合には,[ロック/オブジェクト]を,プロセスから調べる場合には[ロック/プロセスID]を,それぞれクリックする。まず,[状態]列で状態が「WAIT」または「CNVT」になっているオブジェクトあるいはプロセスを探し,該当するものがあれば,さらにほかのデータ列を調べてロックを保持しているプロセスを探す。
Fig.9-44 SQL Server Enterprise Manager
(ロック/オブジェクト) [ロック/オブジェクト]で示される情報は,次のとおりである([ロック/プロセスID]の場合も,オブジェクトの代わりにプロセスIDをキーとして選択するだけで,同じ情報が表示される)。
Table 9-4 [ロック/オブジェクト]で表示される情報
| 列名 | 説明 |
| SPID | サーバープロセスID |
| ロックの種類 | ロックの単位を示す。RIDは行を,KEYはインデックス内の行を,PAGはデータページまたはインデックスページを,EXTはエクステントを,TABはすべてのデータとインデックスを含むテーブル全体を,DBはデータベースを,それぞれロックしていることを示している |
| モード | ロックのモードを示す。Shared(S)は共有ロックを,Update(U)は更新ロックを,Exclusive(X)は排他ロックを,Intentはインテントロックを,Schemaはスキーマロックを,Bulk Update(BU)はデータをテーブルに一括コピーするときにTABLOCKヒントが指定されているときのロックを,それぞれ示している |
| 状態 | ロックの状態を示す。GRANTはロックが正常に取得されたことを,WAITはロックは別のプロセスによってブロックされているためにその解放を待っていることを,CNVTは要求したロックが別のロック(より強力なロックモード,たとえば,更新ロックや排他ロックなど)に変換されて取得されるのを待っていることを,それぞれ示す |
| 所有者 | ロックの所有者を,Xact(トランザクション),Sess(セッション),Curs(カーソル)のどれかで示す |
| インデックス | リソースのインデックスを示す。インデックスがクラスタ化されている場合はテーブル名が表示される |
| リソース | ロックしているリソースを示す。RIDはテーブル内でロックされている行をfileid:page:ridの組み合わせで,KEYはインデックス内の行を16進数で,PAGはロックされているページをfileid:pageの組み合わせで,EXTはロックされるエクステント内の開始ページ番号をfileid:pageの組み合わせで,それぞれ示す。[ロックの種類]がTABおよびDBの場合,別のデータ列で示されているので表示されない |
・パフォーマンスモニタによるロック状況の確認
ロックの状況は,パフォーマンスモニタでSQLServer:Locksオブジェクトを使用しても監視することができる。データベース(Database),テーブル(Table),エクステント(Extent),ページ(Page),キー(Key),行識別子(RID)という各インスタンスに対して,ロックの平均待機時間(Average
Wait Time(ms)),ロックの待機時間(Lock
Wait Time(ms)),ロックの待機数(Lock
Waits/sec),ロックの要求数(Lock
Requests/sec),ロックのタイムアウト数(Lock
Timeouts/sec),デッドロック数(Number
of
Deadlocks/sec)を調査するためのカウンタが用意されている。
パフォーマンスモニタを利用するには,[スタート]メニューから[プログラム]−[SQL
Server 7.0]−[パフォーマンスモニタ]を選択すればよい。使い方は,Windows
NTのパフォーマンスモニタと変わらない。
Fig.9-45 パフォーマンスモニタによるロックの監視

| Chapter 9 23/46 |
