none
Interbloqueos y transacciones RRS feed

  • Pregunta

  • En un proceso (con .NET C# y Sql Server con Dapper) diario, un día llegaron muchos errores:
    Durante la ejecución del proceso diario, también desde una web los clientes interactúan con la bbdd.

    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.

    Y llegaron más en el mismo minuto prácticamente:

    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.


    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?

    Andamos muy perdidos al respecto, nos falta buenas prácticas y conocimiento en el tratamiento de interbloqueos programáticamente..


    martes, 20 de abril de 2021 13:02

Respuestas

Todas las respuestas

  • Hola Miriam Pasión:

    Con la información que muestras poco se puede hacer. 

    Te dejo un buen artículo que te dará una perspectiva apropiada de lo que son.

    https://www.sqlshack.com/es/cuales-son-los-interbloqueos-de-sql-server-y-como-ellos-se-pueden-monitorear/

    • Marcado como respuesta Miriam Pasion jueves, 22 de abril de 2021 16:11
    miércoles, 21 de abril de 2021 4:40
  • 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

    https://www.sqlshack.com/automate-sql-server-deadlock-collection-process-using-extended-events-sql-server-agent/
    https://www.sqlshack.com/monitoring-sql-server-deadlocks-easy-way/


    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
    jueves, 22 de abril de 2021 16:11
  • Hola Miriam Pasion:

    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/

    viernes, 23 de abril de 2021 4:44