Analisi dei deadlock con SQL Server Profiler

SQL Server Profiler consente di identificare la causa di un 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. Tramite SQL Server Profiler, è possibile creare una traccia che registra, riproduce e visualizza gli eventi deadlock da analizzare.

Per tracciare gli eventi deadlock, aggiungere la classe di evento Deadlock graph a una traccia. Questa classe di evento popola la colonna di dati TextData della traccia con i dati XML relativi al processo e agli oggetti coinvolti nel deadlock. SQL Server Profiler è in grado di estrarre il documento XML in un file deadlock XML (con estensione xdl), visualizzabile successivamente in SQL Server Management Studio. È possibile configurare SQL Server Profiler in modo da estrarre gli eventi Deadlock graph in un singolo file che contiene tutti gli eventi Deadlock graph o in file distinti. È possibile eseguire l'estrazione in uno dei modi seguenti:

  • Durante la configurazione della traccia, tramite la scheda Impostazioni estrazione eventi. Si noti che questa scheda non viene visualizzata se non si seleziona l'evento Deadlock graph nella scheda Selezione eventi.

  • Utilizzando il comando Estrai eventi di SQL Server del menu File.

  • Per estrarre e salvare singoli eventi è inoltre possibile fare clic con il pulsante destro del mouse su un evento specifico e scegliere Estrai dati eventi.

Grafici di deadlock

Per descrivere un deadlock, SQL Server Profiler e SQL Server Management Studio utilizzano un grafico che contiene i nodi dei processi, i nodi delle risorse e archi che rappresentano le relazioni tra i processi e le risorse. Nella tabella seguente vengono descritti i componenti di questi grafici:

  • Nodo di processo
    Un thread che esegue un'attività, ad esempio INSERT, UPDATE o DELETE.

  • Nodo di risorsa
    Un oggetto del database, ad esempio una tabella, un indice o una riga.

  • Arco
    Una relazione tra un processo e una risorsa. Un arco di tipo request viene generato quando un processo è in attesa di una risorsa. Un arco di tipo owner viene generato quando una risorsa è in attesa di un processo. Nella descrizione dell'arco è inclusa la modalità di blocco, ad esempio Modalità: X. Per informazioni sui possibili valori per la definizione delle modalità di blocco, vedere Modalità blocco.

Nodo di processo del deadlock

In questo tipo di grafico, il nodo del processo contiene informazioni sul processo. Nella tabella seguente vengono illustrati i componenti di un processo.

Componente

Definizione

ID processo server

Identificatore di processo del server (SPID). Identificatore assegnato dal server al processo proprietario del blocco.

ID batch server

Identificatore del batch server (SBID).

ID contesto esecuzione

Identificatore del contesto di esecuzione (ECID). ID del contesto di esecuzione di un thread specifico associato a un valore SPID specifico.

ECID = {0,1,2,3, ...n}, dove 0 rappresenta sempre il thread principale o padre e {1,2,3, ...n} rappresenta i thread secondari.

Priorità deadlock

Priorità dei deadlock per il processo. Per ulteriori informazioni sui possibili valori, vedere SET DEADLOCK_PRIORITY (Transact-SQL).

Log utilizzato

Quantità di spazio del log utilizzata dal processo.

ID proprietario

ID transazione per i processi che utilizzano transazioni e che sono in attesa in un blocco.

Descrittore transazione

Puntatore al descrittore della transazione che descrive lo stato della transazione.

Buffer di input

Buffer di input del processo corrente. Definisce il tipo di evento e l'istruzione eseguita. I possibili valori sono:

  • Language

  • RPC

  • Nessuna

Istruzione

Tipo di istruzione. I valori possibili sono:

  • NOP

  • SELECT

  • UPDATE

  • INSERT

  • DELETE

  • Sconosciuto

Nodo di risorsa del deadlock

In un deadlock, due processi sono in attesa ognuno di una risorsa mantenuta dall'altro processo. In un grafico di deadlock, le risorse sono visualizzate come nodi di risorsa. Le risorse appartengono a uno dei tipi elencati in Granularità dei blocchi e gerarchie.