SQL Server Profiler を使用したデッドロックの分析Analyze Deadlocks with SQL Server Profiler

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

SQL Server プロファイラーSQL Server Profiler を使用して、デッドロックの原因を特定します。Use SQL Server プロファイラーSQL Server Profiler to identify the cause of a deadlock. デッドロックは、SQL Server 内のリソースの集合に対して複数のスレッド間またはプロセス間で相互に依存関係があるときに発生します。A deadlock occurs when there is a cyclic dependency between two or more threads, or processes, for some set of resources within SQL Server. SQL Server プロファイラーSQL Server Profilerを使用すると、分析用にデッドロック イベントを記録、再生、および表示するトレースを作成できます。Using SQL Server プロファイラーSQL Server Profiler, you can create a trace that records, replays, and displays deadlock events for analysis.

デッドロック イベントをトレースするには、 Deadlock Graph イベント クラスをトレースに追加します。To trace deadlock events, add the Deadlock graph event class to a trace. このイベント クラスにより、デッドロックに関連するプロセスとオブジェクトに関する XML データが、トレースの TextData データ列に設定されます。This event class populates the TextData data column in the trace with XML data about the process and objects that are involved in the deadlock. SQL Server プロファイラーSQL Server Profiler では、この XML ドキュメントをデッドロック XML (.xdl) ファイルに抽出して、後で SQL Server Management Studio で表示できます。can extract the XML document to a deadlock XML (.xdl) file which you can view later in SQL Server Management Studio. SQL Server プロファイラーSQL Server Profiler Deadlock Graph イベントを、すべての Deadlock Graph イベントが含まれた 1 つのファイルに抽出するか、または個別のファイルに抽出するように を構成できます。You can configure SQL Server プロファイラーSQL Server Profiler to extract Deadlock graph events to a single file that contains all Deadlock graph events, or to separate files. この抽出は、次の方法のいずれかを使用して実行できます。This extraction can be done in any of the following ways:

  • トレースの構成時に、 [イベント抽出の設定] タブを使用する。このタブは、 [イベントの選択] タブで Deadlock Graph イベントを選択していないと表示されないので注意してください。At trace configuration time, using the Events Extraction Settings tab. Note that this tab does not appear until you select the Deadlock graph event on the Events Selection tab.

  • [ファイル] メニューの [SQL Server イベントの抽出] オプションを使用する。Using the Extract SQL Server Events option on the File menu.

  • 特定のイベントを右クリックし、 [イベント データの抽出] をクリックすることにより、個々のイベントを抽出して保存することもできます。Individual events can also be extracted and saved by right-clicking a specific event and choosing Extract Event Data.

Deadlock GraphDeadlock Graphs

SQL Server プロファイラーSQL Server Profiler SQL Server Management StudioSQL Server Management Studio では、Deadlock Wait-for Graph を使用してデッドロックが説明されます。and SQL Server Management StudioSQL Server Management Studio use a deadlock wait-for graph to describe a deadlock. Deadlock Wait-for Graph には、プロセス ノード、リソース ノード、およびプロセスとリソース間の関係を表すエッジが含まれています。The deadlock wait-for graph contains process nodes, resource nodes, and edges representing the relationships between the processes and the resources. 次の表では、Deadlock Wait-for Graph の構成要素を定義します。The components of wait-for graphs are defined in the following table:

プロセス ノードProcess node
INSERT、UPDATE、DELETE などのタスクを実行するスレッド。A thread that performs a task; for example, INSERT, UPDATE, or DELETE.

リソース ノードResource node
テーブル、インデックス、行などのデータベース オブジェクト。A database object; for example, a table, index, or row.

EdgeEdge
プロセスとリソース間の関係。A relationship between a process and a resource. request エッジは、プロセスがリソースを待機したときに発生します。A request edge occurs when a process waits for a resource. owner エッジは、リソースがプロセスを待機したときに発生します。An owner edge occurs when a resource waits for a process. ロック モードは、エッジの記述に含まれます。The lock mode is included in the edge description. たとえば、モード:X などです。For example, Mode: X.

デッドロック プロセス ノードDeadlock Process Node

Deadlock Wait-for Graph には、プロセス ノードにプロセスに関する情報が含まれています。In a wait-for graph, the process node contains information about the process. 次の表で、プロセスの構成要素について説明します。The following table explains the components of a process.

コンポーネントComponent 定義Definition
[サーバー プロセス ID]Server process Id サーバー プロセス ID (SPID)。ロックを所有しているプロセスのサーバー割り当て ID です。Server process identifier (SPID), a server assigned identifier for the process owning the lock.
[サーバー バッチ ID]Server batch Id サーバー バッチ ID (SBID)。Server batch identifier (SBID).
[実行コンテキスト ID]Execution context Id 実行コンテキスト ID (ECID)。Execution context identifier (ECID). 特定の SPID に関連付けられている特定のスレッドの実行コンテキスト ID です。The execution context ID of a given thread associated with a specific SPID.

ECID = {0, 1, 2, 3, ...n}。0 は常にメイン スレッドまたは親スレッドを表し、{1, 2, 3, ... n} は、サブスレッドを表します。ECID = {0,1,2,3, ...n}, where 0 always represents the main or parent thread, and {1,2,3, ...n} represent the subthreads.
[デッドロックの優先度]Deadlock priority プロセスのデッドロックの優先度。Deadlock priority for the process. 詳細については、「SET DEADLOCK_PRIORITY (Transact-SQL)」を参照してください。For more information about possible values, see SET DEADLOCK_PRIORITY (Transact-SQL).
[使用されたログ]Log Used プロセスで使用されたログ領域の量。Amount of log space used by the process.
[所有者 ID]Owner Id トランザクションを使用しており、現在ロックを待機しているプロセスのトランザクション ID。Transaction ID for the processes which are using transactions and currently waiting on a lock.
[トランザクション記述子]Transaction descriptor トランザクションの状態を記述するトランザクション記述子へのポインター。Pointer to the transaction descriptor that describes the state of the transaction.
[入力バッファー]Input buffer 現在のプロセスの入力バッファー。イベントの種類と実行中のステートメントを定義します。Input buffer of the current process, defines the type of event and the statement being executed. 指定できる値は、次のとおりです。Possible values include:

LanguageLanguage

RPCRPC

なしNone
ステートメントStatement ステートメントの種類。Type of statement. 次のいずれかの値になります。Possible values are:

NOPNOP

SELECTSELECT

UPDATEUPDATE

INSERTINSERT

DELETEDELETE

UnknownUnknown

デッドロック リソース ノードDeadlock Resource Node

デッドロックにおいて、2 つのプロセスが、他のプロセスで使用されているリソースをそれぞれ待機しています。In a deadlock, two processes are each waiting for a resource held by the other process. Deadlock Graph では、これらのリソースがリソース ノードとして表示されます。In a deadlock graph, the resources are displayed as resource nodes.