> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Interbloqueos de la base de datos

> Registre y analice interbloqueos de bases de datos SQL en ABBYY FlexiCapture mediante sesiones de Extended Events, con consultas de ejemplo para XEvents y la sesión system_health.

Si se producen interbloqueos en la base de datos SQL mientras utiliza el programa, habilite el registro de información sobre interbloqueos mediante el sistema Extended Events.

<div id="create-an-xevents-session">
  ## Crear una sesión de XEvents
</div>

Cree la sesión con el asistente de SQL Server Management Studio:

1. Inicie el Asistente para nueva sesión desde el Explorador de objetos, en **Management → Extended Events → Sessions**.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_1.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=34da823659fa5d183236dffad4ea93dd" alt="Captura de pantalla de SQL Server Management Studio iniciando el Asistente para nueva sesión desde el Explorador de objetos, en Management, Extended Events, Sessions." width="278" height="300" data-path="images/flexi-capture/TG_Communication_DeadLock_1.png" />
   </Frame>
2. Especifique un nombre para la sesión. Para iniciarla al arrancar el servidor, seleccione la opción **Start the event session at server startup**.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_2.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=ec0de39e0fb9b653601f9dd895a6663c" alt="Captura de pantalla del Asistente para nueva sesión con un nombre de sesión introducido y la opción Start the event session at server startup seleccionada." width="716" height="333" data-path="images/flexi-capture/TG_Communication_DeadLock_2.png" />
   </Frame>
3. En la sección **Select Events To Capture**, busque `xml_deadlock_report`.

   <Frame>
     <img src="https://mintcdn.com/abbyy/XVEmG3cTpHwMKf5X/images/flexi-capture/TG_Communication_DeadLock_3.png?fit=max&auto=format&n=XVEmG3cTpHwMKf5X&q=85&s=fcc170b0d35e0d921820aa56989df4f8" alt="Captura de pantalla del paso Select Events To Capture del Asistente para nueva sesión con xml_deadlock_report seleccionado." width="866" height="572" data-path="images/flexi-capture/TG_Communication_DeadLock_3.png" />
   </Frame>
4. En la sección **Specify Session Data Storage**, especifique la ruta de la ubicación donde se guarda el archivo que contiene los resultados registrados de la sesión. La opción **Enable file rollover** activa la rotación automática en el directorio especificado.
5. En la sección **Summary**, puede abrir y guardar en T-SQL los resultados de la sesión del asistente.

<div id="view-deadlock-information">
  ## Ver información sobre interbloqueos
</div>

<div id="from-the-xevents-session">
  ### Desde la sesión de XEvents
</div>

Para leer archivos `.xel`, SQL Server proporciona la función de valor de tabla `sys.fn_xe_file_target_read_file`. Ejecute la siguiente consulta en SQL Server Management Studio y especifique la ruta de acceso a los archivos de seguimiento:

```sql theme={null}
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_graph
from sys.fn_xe_file_target_read_file('D:\MSSQL\XE\deadlocks\deadlocks*.xel', null, null, null) as f  -- comodín (deadlocks*.xel)
cross apply (select cast(f.event_data as xml)) as e(xdata);
```

<div id="from-the-system_health-session">
  ### Desde la sesión system\_health
</div>

Si el registro de interbloqueos no está habilitado, puede consultar la información sobre interbloqueos a través de la sesión `system_health`, que siempre está habilitada de forma predeterminada. Ejecute la siguiente consulta en SQL Server Management Studio:

```sql theme={null}
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_graph
from sys.fn_xe_file_target_read_file('system_health*.xel', null, null, null) as f
cross apply (select cast(f.event_data as xml)) as e(xdata)
where object_name = N'xml_deadlock_report';
```

<div id="in-azure">
  ### En Azure
</div>

Azure tiene una sesión independiente que, de forma predeterminada, se recopila en el almacenamiento de blobs. Para verla, ejecute la consulta siguiente en el contexto maestro:

```sql theme={null}
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_graph
from sys.fn_xe_telemetry_blob_target_read_file('dl', null, null, null) as f
cross apply (select cast(f.event_data as xml)) as e(xdata);
```

Después de ejecutar la consulta, póngase en contacto con el soporte técnico y proporcione la información sobre el interbloqueo de los resultados.
