Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
Usare SQL Server Profiler per identificare la causa di un deadlock. Un deadlock si verifica quando si verifica una dipendenza ciclica tra due o più thread o processi per alcuni set di risorse all'interno di 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 consente di popolare la colonna di dati TextData nella traccia con dati XML sul processo e gli oggetti coinvolti nel deadlock. SQL Server Profiler può estrarre il documento XML in un file .xdl di deadlock, che è possibile visualizzare successivamente in SQL Server Management Studio. È possibile configurare SQL Server Profiler per estrarre gli eventi Deadlock graph in un singolo file contenente tutti gli eventi Deadlock graph oppure in file distinti. È possibile eseguire l'estrazione in uno dei modi seguenti:
In fase di configurazione della traccia, usando la scheda Impostazioni estrazione eventi. Questa scheda non viene visualizzata finché non si seleziona l'evento Deadlock graph nella scheda Selezione eventi.
Con il comando Estrai eventi di SQL Server del menu File .
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.
Grafici di stallo
SQL Server Profiler e SQL Server Management Studio utilizzano un grafo di attesa di deadlock per descrivere un deadlock. Il grafico di attesa del deadlock contiene i nodi dei processi, i nodi delle risorse e gli archi che rappresentano le relazioni tra i processi e le risorse. I componenti dei grafici di attesa sono definiti nella tabella seguente.
nodo | Descrizione |
---|---|
Nodo di processo | Thread che esegue un'attività; ad esempio, INSERT , UPDATE o DELETE . |
Nodo di risorsa | Un oggetto di database, ad esempio una tabella, un indice o una riga. |
Bordo | Una relazione tra un processo e una risorsa. Un arco di tipo richiesta viene generato quando un processo è in attesa di una risorsa. Un arco di tipo proprietario viene generato quando una risorsa è in attesa di un processo. La modalità di blocco è inclusa nella descrizione del bordo. ad esempio Modalità: X. |
Nodo di stallo del processo
Nel grafo di attesa, il nodo del processo contiene informazioni sul processo. Nella tabella seguente vengono illustrati i componenti di un processo.
Componente | Definizione |
---|---|
ID server del processo | ID sessione (SPID), identificatore assegnato dal server al processo che possiede il blocco. |
Server batch ID | Identificatore del batch server (SBID). |
ID contesto di esecuzione | Identificatore del contesto di esecuzione (ECID). ID del contesto di esecuzione di un determinato thread associato a un ID di sessione specifico. ECID = { 0, 1, 2, 3, ... n }, dove 0 rappresenta sempre il thread principale o padre e { 1, 2, 3, ... n } rappresenta i sottothread. |
Priorità di stallo | Priorità dei deadlock per il processo. Per altre informazioni sui valori possibili, vedere SET DEADLOCK_PRIORITY. |
Log utilizzato | Quantità di spazio del log utilizzata dal processo. |
ID Proprietario | ID transazione per i processi che utilizzano transazioni e che sono attualmente in attesa di un blocco. |
Descrittore della transazione | Puntatore al descrittore della transazione che descrive lo stato della transazione. |
Buffer di input | Buffer di input del processo corrente. Consente di definire il tipo di evento e l'istruzione eseguita. I valori possibili includono: Lingua RPC Nessuno |
Dichiarazione | Tipo di istruzione. I valori possibili sono: NOP SELEZIONARE AGGIORNARE INSERT … ELIMINA Sconosciuto |
Nodo della risorsa di stallo
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.