Interbloqueos

391 views
Skip to first unread message

Carlos Admirador

unread,
Apr 20, 2021, 3:55:08 AM4/20/21
to AltNet-Hispano
En un proceso diario, un día llegaron muchos errores:

llegaron muchos errores de interbloqueos, transacciones...

: System.Data.SqlClient.SqlException (0x80131904): La transacción (id. de proceso 125) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.


Error La transacción (id. de proceso 125) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 157) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 160) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 122) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 104) quedó en interbloqueo en bloqueo | búfer de comunicaciones recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 143) quedó en interbloqueo en bloqueo recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 159) quedó en interbloqueo en bloqueo recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 125) quedó en interbloqueo en bloqueo recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 156) quedó en interbloqueo en bloqueo recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.

Error La transacción (id. de proceso 161) quedó en interbloqueo en bloqueo recursos con otro proceso y fue elegida como sujeto del interbloqueo. Ejecute de nuevo la transacción.


3 veces: Error Se agotó el tiempo de espera de ejecución. El período de tiempo de espera transcurrió antes de la finalización de la operación o el servidor no responde.


Algún troubleshooting al respecto?

Carlos Admirador

unread,
Apr 22, 2021, 11:43:24 AM4/22/21
to AltNet-Hispano

Carlos Admirador

unread,
Apr 22, 2021, 12:11:02 PM4/22/21
to AltNet-Hispano
Entiendo que es complejo.
Sé las dos tablas implicadas, una en especial. 
Además en el desarrollo .NET utilizamos un TransactionScope durante la carga de datos.

Gran artículo. 
De todas las opciones de seguimiento, cuál afecta menos al rendimiento?

seguimiento solamente de las apariciones de interbloqueos:

EXEC sp_altermessage 1205, 'WITH_LOG', 'true'
xp_readerrorlog 

seguimiento de los detalles de interbloqueos:
1) Banderas de seguimiento 1204 y 1222

DBCC TRACEON(<Flag_Number>,-1) ;
DBCC TRACEOFF(<Flag_Number>,-1) ;


2) SQL Server Profiler y SQL Server Trace
NO se puede automatizar ??

3) Eventos extendidos y sesión system_health
"una sesión predeterminada de eventos extendidos llamadasystem_health "

recopilar información sobre cualquier interbloqueo detectado en archivos XEL

a) usando vistas y funciones de Dynamic Management; (cuáles??)
b) utilizando la función proporcionada por Microsoft para leer datos de un archivo de sesión de eventos extendidos:

sys.fn_xe_file_target_read_file


4) Sesión de eventos extendidos personalizados
Se puede automatizar parece



Default Extended Events Session (system_health) no impacta en rendimiento y NO requiere activación
Custom Extended Events Session no impacta en rendimiento y SI requiere activación


Carlos Admirador

unread,
Apr 23, 2021, 4:43:30 AM4/23/21
to AltNet-Hispano

La respuesta es utilizar "xEvents", pero no es algo que se pueda valorar tan fácilmente. Todas las recomendaciones oficiales, pasan por los "eventos ligeros", porque están integrados en el motor y son más rápidos, con más información, menor carga de trabajo. A partir de ahí no me parece algo que se pueda responder en un hilo.

Estás entrando en un escenario muy complejo, que siempre puede tener un impacto mayor o menor en el servidor y que es muy complicado analizar, ya que la opción buena, será también la que sirva al propósito requerido. Porque ya sabes que tienes algunos bloqueos, y tienes localizadas las tablas. El objetivo de automatizarlo, yo no lo veo claro, no porque no se pueda, sino porque más bien lo lógico de esto, es usarlo cuando ocurre algo. A partir de ahí localizas el problema que lo genera, cambias el código, y cuando se ve que se ha solucionado, se deja de usar.

https://logicalread.com/why-use-sql-server-extended-events-w01/#.YIJMZZAzZaQ

https://www.brentozar.com/archive/2014/03/extended-events-doesnt-hard/


Reply all
Reply to author
Forward
0 new messages