Analizzare deadlock con SQL Server ProfilerAnalyze Deadlocks with SQL Server Profiler

SQL Server ProfilerSQL Server Profiler consente di identificare la causa di un deadlock.Use SQL Server ProfilerSQL Server Profiler to identify the cause of a deadlock. I deadlock si verificano in caso di dipendenza ciclica tra due o più thread o processi per alcuni set di risorse in 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. Tramite SQL Server ProfilerSQL Server Profiler, è possibile creare una traccia che registra, riproduce e visualizza gli eventi deadlock da analizzare.Using SQL Server ProfilerSQL Server Profiler, you can create a trace that records, replays, and displays deadlock events for analysis.

Per tracciare gli eventi deadlock, aggiungere la classe di evento Deadlock graph a una traccia.To trace deadlock events, add the Deadlock graph event class to a trace. Questa classe di evento consente di popolare la colonna di dati TextData nella traccia con dati XML sul processo e gli oggetti coinvolti nel deadlock.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 ProfilerSQL Server Profiler può estrarre il documento XML in un file XML del deadlock (con estensione xdl) visualizzabile in un secondo momento in 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. È possibile configurare SQL Server ProfilerSQL Server Profiler per estrarre gli eventi Deadlock graph in un singolo file contenente tutti gli eventi Deadlock graph oppure in file distinti.You can configure SQL Server ProfilerSQL Server Profiler to extract Deadlock graph events to a single file that contains all Deadlock graph events, or to separate files. È possibile eseguire l'estrazione in uno dei modi seguenti:This extraction can be done in any of the following ways:

  • Durante la configurazione della traccia, con la scheda Impostazioni estrazione eventi .At trace configuration time, using the Events Extraction Settings tab. Si noti che questa scheda non viene visualizzata a meno che non si selezioni l'evento Deadlock graph nella scheda Selezione eventi .Note that this tab does not appear until you select the Deadlock graph event on the Events Selection tab.

  • Con il comando Estrai eventi di SQL Server del menu File .Using the Extract SQL Server Events option on the File menu.

  • Per estrarre e salvare singoli eventi è anche possibile fare clic con il pulsante destro del mouse su un evento specifico e scegliere Estrai dati eventi.Individual events can also be extracted and saved by right-clicking a specific event and choosing Extract Event Data.

Grafici di deadlockDeadlock Graphs

SQL Server ProfilerSQL Server Profiler e SQL Server Management StudioSQL Server Management Studio usano per descrivere un deadlock un grafico and SQL Server Management StudioSQL Server Management Studio use a deadlock wait-for graph to describe a deadlock. che contiene i nodi dei processi, i nodi delle risorse e archi che rappresentano le relazioni tra i processi e le risorse.The deadlock wait-for graph contains process nodes, resource nodes, and edges representing the relationships between the processes and the resources. Nella tabella seguente vengono descritti i componenti di questi grafici:The components of wait-for graphs are defined in the following table:

Nodo di processoProcess node
Un thread che esegue un'attività, ad esempio INSERT, UPDATE o DELETE.A thread that performs a task; for example, INSERT, UPDATE, or DELETE.

Nodo di risorsaResource node
Un oggetto di database, ad esempio una tabella, un indice o una riga.A database object; for example, a table, index, or row.

ArcoEdge
Una relazione tra un processo e una risorsa.A relationship between a process and a resource. Un arco di tipo richiesta viene generato quando un processo è in attesa di una risorsa.A request edge occurs when a process waits for a resource. Un arco di tipo proprietario viene generato quando una risorsa è in attesa di un processo.An owner edge occurs when a resource waits for a process. Nella descrizione dell'arco è inclusa la modalità di blocco,The lock mode is included in the edge description. ad esempio Modalità: X.For example, Mode: X.

Nodo di processo del deadlockDeadlock Process Node

In questo tipo di grafico, il nodo del processo contiene informazioni sul processo.In a wait-for graph, the process node contains information about the process. Nella tabella seguente vengono illustrati i componenti di un processo.The following table explains the components of a process.

ComponenteComponent DefinizioneDefinition
ID processo serverServer process Id Identificatore di processo del server (SPID). Identificatore assegnato dal server al processo proprietario del blocco.Server process identifier (SPID), a server assigned identifier for the process owning the lock.
ID batch serverServer batch Id Identificatore del batch server (SBID).Server batch identifier (SBID).
ID contesto esecuzioneExecution context Id Identificatore del contesto di esecuzione (ECID).Execution context identifier (ECID). ID del contesto di esecuzione di un thread specifico associato a un valore SPID specifico.The execution context ID of a given thread associated with a specific SPID.

ECID = {0,1,2,3, ...n}, dove 0 rappresenta sempre il thread principale o padre e {1,2,3, ...n} rappresenta i thread secondari.ECID = {0,1,2,3, ...n}, where 0 always represents the main or parent thread, and {1,2,3, ...n} represent the subthreads.
Priorità deadlockDeadlock priority Priorità dei deadlock per il processo.Deadlock priority for the process. Per altre informazioni sui possibili valori, vedere SET DEADLOCK_PRIORITY (Transact-SQL).For more information about possible values, see SET DEADLOCK_PRIORITY (Transact-SQL).
Log utilizzatoLog Used Quantità di spazio del log utilizzata dal processo.Amount of log space used by the process.
ID proprietarioOwner Id ID transazione per i processi che utilizzano transazioni e che sono in attesa in un blocco.Transaction ID for the processes which are using transactions and currently waiting on a lock.
Descrittore transazioneTransaction descriptor Puntatore al descrittore della transazione che descrive lo stato della transazione.Pointer to the transaction descriptor that describes the state of the transaction.
Buffer di inputInput buffer Buffer di input del processo corrente. Consente di definire il tipo di evento e l'istruzione eseguita.Input buffer of the current process, defines the type of event and the statement being executed. I valori possibili includono:Possible values include:

LinguaLanguage

RPCRPC

NessunoNone
IstruzioneStatement Tipo di istruzione.Type of statement. I valori possibili sono:Possible values are:

NOPNOP

SELECTSELECT

UPDATEUPDATE

INSERTINSERT

DELETEDELETE

UnknownUnknown

Nodo di risorsa del deadlockDeadlock Resource Node

In un deadlock, due processi sono in attesa ognuno di una risorsa mantenuta dall'altro processo.In a deadlock, two processes are each waiting for a resource held by the other process. In un grafico di deadlock, le risorse sono visualizzate come nodi di risorsa.In a deadlock graph, the resources are displayed as resource nodes.