Analizar interbloqueos con SQL Server ProfilerAnalyze Deadlocks with SQL Server Profiler

ESTE TEMA SE APLICA A:síSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Use el SQL Server ProfilerSQL Server Profiler para identificar la causa de un interbloqueo.Use SQL Server ProfilerSQL Server Profiler to identify the cause of a deadlock. Un interbloqueo se produce cuando hay una dependencia cíclica entre dos o más subprocesos o procesos para algún conjunto de recursos en 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. El SQL Server ProfilerSQL Server Profilerle permite crear un seguimiento que registra, reproduce y muestra eventos de interbloqueo para su análisis.Using SQL Server ProfilerSQL Server Profiler, you can create a trace that records, replays, and displays deadlock events for analysis.

Para realizar un seguimiento de los eventos de interbloqueo, agregue la clase de evento Deadlock graph a un seguimiento.To trace deadlock events, add the Deadlock graph event class to a trace. Esta clase de evento rellena la columna de datos TextData del seguimiento con datos XML acerca de los procesos y objetos implicados en el interbloqueo.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 pueden extraer el documento XML a un archivo XML de interbloqueo (.xdl) que puede ver después en 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. Puede configurar el SQL Server ProfilerSQL Server Profiler para extraer eventos Deadlock graph en un solo archivo que contenga todos los eventos Deadlock graph o en archivos independientes.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. Esta extracción se puede hacer de las siguientes formas:This extraction can be done in any of the following ways:

  • Al configurar el seguimiento, mediante la pestaña Configuración de extracción de eventos . Tenga en cuenta que esta pestaña no aparece hasta que haya seleccionado el evento Deadlock graph en la pestaña Selección de eventos .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.

  • Mediante la opción Extraer eventos de SQL Server del menú Archivo .Using the Extract SQL Server Events option on the File menu.

  • También puede extraer y guardar eventos individuales al hacer clic con el botón derecho en un evento concreto y elegir Extraer datos de evento.Individual events can also be extracted and saved by right-clicking a specific event and choosing Extract Event Data.

Gráficos de interbloqueoDeadlock Graphs

SQL Server ProfilerSQL Server Profiler y SQL Server Management StudioSQL Server Management Studio usan un gráfico de espera de interbloqueo para describir un interbloqueo. and SQL Server Management StudioSQL Server Management Studio use a deadlock wait-for graph to describe a deadlock. El gráfico de espera de interbloqueo contiene nodos de proceso, nodos de recurso y bordes que representan las relaciones entre los procesos y los recursos.The deadlock wait-for graph contains process nodes, resource nodes, and edges representing the relationships between the processes and the resources. Los componentes de los gráficos de espera se definen en la siguiente tabla:The components of wait-for graphs are defined in the following table:

Nodo de procesoProcess node
Un subproceso que realiza una tarea; por ejemplo, INSERT, UPDATE o DELETE.A thread that performs a task; for example, INSERT, UPDATE, or DELETE.

Nodo de recursoResource node
Un objeto de la base de datos; por ejemplo, una tabla, un índice o una fila.A database object; for example, a table, index, or row.

BordeEdge
Una relación entre un proceso y un recurso.A relationship between a process and a resource. Un borde request se produce cuando un proceso espera un recurso.A request edge occurs when a process waits for a resource. Un borde owner se produce cuando un recurso espera un proceso.An owner edge occurs when a resource waits for a process. El modo de bloqueo se incluye en la descripción del borde.The lock mode is included in the edge description. Por ejemplo, Modo: X.For example, Mode: X.

Nodo de proceso de interbloqueoDeadlock Process Node

En un gráfico de espera, el nodo de proceso contiene información acerca del proceso.In a wait-for graph, the process node contains information about the process. En la tabla siguiente se explican los componentes de un proceso.The following table explains the components of a process.

ComponenteComponent DefiniciónDefinition
Id. de proceso de servidorServer process Id Identificador de proceso de servidor (SPID), un identificador asignado a un servidor para el proceso que posee el bloqueo.Server process identifier (SPID), a server assigned identifier for the process owning the lock.
Id. de lote de servidoresServer batch Id Identificador de lote de servidores (SBID).Server batch identifier (SBID).
Id. de contexto de ejecuciónExecution context Id Identificador de contexto de ejecución (ECID).Execution context identifier (ECID). Id. de contexto de ejecución de un subproceso dado asociado con un SPID específico.The execution context ID of a given thread associated with a specific SPID.

ECID = {0,1,2,3, ...n}, donde 0 siempre representa el subproceso principal o primario, y {1,2,3, ...n} representan los subprocesos secundarios.ECID = {0,1,2,3, ...n}, where 0 always represents the main or parent thread, and {1,2,3, ...n} represent the subthreads.
Prioridad de interbloqueoDeadlock priority Prioridad de interbloqueo del proceso.Deadlock priority for the process. Para obtener más información sobre los valores posibles, vea SET DEADLOCK_PRIORITY (Transact-SQL).For more information about possible values, see SET DEADLOCK_PRIORITY (Transact-SQL).
Registro utilizadoLog Used Cantidad de espacio del registro utilizado por el proceso.Amount of log space used by the process.
Id. de propietarioOwner Id Id. de transacción de los procesos que están usando transacciones y que actualmente están esperando en un bloqueo.Transaction ID for the processes which are using transactions and currently waiting on a lock.
Descriptor de transacciónTransaction descriptor Puntero al descriptor de transacción que describe el estado de la transacción.Pointer to the transaction descriptor that describes the state of the transaction.
Búfer de entradaInput buffer Búfer de entrada del proceso actual; define el tipo de evento y la instrucción que se está ejecutando.Input buffer of the current process, defines the type of event and the statement being executed. Los valores posibles incluyen:Possible values include:

LenguajeLanguage

RPCRPC

NingunoNone
.Statement Tipo de instrucción.Type of statement. Los valores posibles son:Possible values are:

NOPNOP

SELECTSELECT

UPDATEUPDATE

INSERTINSERT

DELETEDELETE

DesconocidoUnknown

Nodo de recurso de interbloqueoDeadlock Resource Node

En un interbloqueo, dos procesos están esperando un recurso retenido por el otro recurso.In a deadlock, two processes are each waiting for a resource held by the other process. En un gráfico de interbloqueo, los recursos se muestran como nodos de recursos.In a deadlock graph, the resources are displayed as resource nodes.