この特集のトップページへ

・DBCC TRACEONステートメントによるロック状況の確認
 DBCC TRACEONステートメントにトレースフラグ1200,1204,1205を設定すると,テキストベースでロックの状況を調べることができる。トレースフラグ1200を設定するとロックを要求しているプロセス情報が,トレースフラグ1204を設定するとデッドロックになっているロックタイプとその実行コマンドにかかわる情報が,トレースフラグ1205を設定するとデッドロック時に実行されているコマンドにかかわる情報が,それぞれ表示される(Fig.9-46)。

・SQL Serverプロファイラによるロック状況の確認
 SQL Serverプロファイラを使用すれば,ロックイベントのみを監視することができる(Fig.9-47)。たとえば,デッドロックイベントのみを監視して,デッドロックイベントが発生したときにデータベース管理者に通知させれば,管理者の負担は軽減されるだろう。

Fig.9-46 DBCC TRACEONステートメントによるロックの監視


Fig.9-47 SQL Serverプロファイラによるロック状況監視


 SQL Serverプロファイラでロックイベントを監視するのであれば,サーバー名,データベースID,オブジェクトIDでグループ化して,開始時刻,イベントクラス,アプリケーション名,テキストなどを設定すれば,そのオブジェクトにおいてほかのプロセスをブロックしているロックを容易に見つけ出すことができるだろう。

・syslockinfoテーブルによるロック状況の確認
 従来バージョンのSQL Serverではsyslocksテーブルでロック情報が管理されていたが,SQL Server 7.0ではsyslockinfoテーブルで管理されるようになっている。したがって,syslockinfoテーブルを検索してロック状況を確認することも可能である(Fig.9-48)。req_refcnt列やreq_lifetime列を監視することで,ロックに起因する問題をすばやく見つけ出すことができるだろう。

Fig.9-48 syslockinfoテーブルの出力

 ロックによるアプリケーションの性能劣化を避けるためには,プロセス間の競合をできるだけ避けるようにアプリケーションを開発する必要がある。ロックで性能が低下している場合は,次のような観点からアプリケーションを検証する。

  • 指定しているロックタイプは適切か
  • トランザクションが複雑で長くないか
  • BEGIN TRANステートメントとCOMMIT TRANステートメントのあいだにユーザーからの入力処理が実装されていないか
  • BEGIN TRANステートメントの数とCOMMIT TRANステートメントの数が一致しているか
前へ Chapter 9 24/46 次へ