メインコンテンツへスキップ
プログラムの使用中に SQL データベースのデッドロックが発生する場合は、デッドロック情報のログ記録を有効にしてください。これを行うには、Extended Events システムを使用します。 SQL Server Management Studio のウィザードを使用して XEvents セッションを作成する:
  1. Object Explorer Management/Extended Events/Sessions から New Session Wizard を起動します。
  1. セッション名を指定します。サーバーの起動時にセッションを開始する場合は、Start the event session at server startup オプションを選択します。
  1. Select Events To Capture セクションで、“xml_deadlock_report” を探します。
  1. Specify Session Data Storage セクションで、記録されたセッション結果を含むファイルの保存先パスを指定します。Enable file rollover オプションを有効にすると、指定したディレクトリでファイルが自動的にローテーションされます。
  2. Summary セクションでは、ウィザード セッションの結果を T-SQL として開いて保存できます。

デッドロック情報を表示する

  • XEvents セッションを使用してデッドロックに関する情報を表示する .xel ファイルを読み取るには、SQL Server には DMF sys.fn_xe_file_target_read_file コンポーネントがあります。次のクエリを SQL Server Management Studio で実行し、トレース ファイルのパスを指定します。 select xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘D:\MSSQL\XE\deadlocks\deadlocks.xel’,null,null,null) as f — wildcard (deadlocks*.xel)cross apply (select cast(f.event_data as xml)) as e(xdata);
  • system_health セッションを使用したデッドロック情報の表示 デッドロックの logging が有効になっていない場合は、既定で常に有効になっているセッション (system_health) を使用して、デッドロックに関する情報を確認できます。 これを行うには、SQL Server Management Studio で次のクエリを実行します。 select e.xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,e.xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘system_health*.xel’,null,null,null) as fcross apply (select cast(f.event_data as xml)) as e(xdata)where object_name = N’xml_deadlock_report’;
  • Azure でデッドロック情報を表示する Azure には、既定で Blob Storage に収集される個別のセッションがあります。これを表示するには、以下のサンプル クエリを使用します (このクエリは master コンテキストで実行する必要があります) 。 select f.file_name ,xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_telemetry_blob_target_read_file(‘dl’, null, null, null) as fcross apply (select cast(f.event_data as xml)) as e(xdata);
テクニカルサポートに連絡し、クエリを実行して取得したデッドロック情報を提供してください。