Si bien todos sabemos que el bloqueo es esencial para la integridad de los datos, ¡no cambia el hecho de que puede ser una gran espina en su costado!
Cuando vemos bloqueos en nuestra base de datos, a menudo asumimos que algo anda mal; no siempre es así. Según mi experiencia, la mayoría de los bloqueos de SQL Server son legítimos, pero deben investigarse y comprenderse. ¡Los interbloqueos, por otro lado, rara vez son legítimos! Los interbloqueos se consideran críticos en el mundo de SQL Server porque los procesos se eliminan automáticamente, ya que SQL Server resuelve los interbloqueos sin necesidad de intervención manual. Una vez más, aunque están "resueltos", definitivamente necesitan ser investigados y entendidos.
Existen algunas estrategias de diseño que pueden ayudar a reducir las ocurrencias de bloqueos e interbloqueos de SQL Server en su base de datos:
- Usar índices agrupados en tablas de alto uso
- Evite sentencias SQL con un alto número de filas
- Divida las transacciones largas en muchas transacciones más cortas
- Asegúrese de que las instrucciones UPDATE y DELETE utilicen índices
- No programe trabajos de actualización por lotes para que se superpongan
- Mantén tus estadísticas actualizadas
Y estoy seguro de que hay muchos más, pero la realidad es que puedes seguir todas las mejores prácticas que se te ocurran y seguir teniendo bloqueos y bloqueos. Esto se debe a que, en la mayoría de los casos, los bloqueos son causados por un código de aplicación mal diseñado. (La madriguera del diseño de aplicaciones:codificación, aislamiento de transacciones y patrones de acceso. Pero por ahora, concentrémonos en investigar y comprender los bloqueos y puntos muertos).
Bloqueo y interbloqueos de SQL Server
El primer desafío con los bloqueos y puntos muertos es identificar cuándo y dónde ocurren porque, por lo general, no se informan, se informan después del hecho o se resuelven automáticamente. Para obtener una comprensión real de lo que sucede en su base de datos con respecto a los bloqueos y los interbloqueos, debe ver sus ocurrencias a lo largo del tiempo. Además, para rectificar el problema y evitar que ocurran en el futuro, debe llegar a la causa raíz del bloqueo:armarse con la información que necesita transmitir a los desarrolladores de la aplicación y, por lo tanto, poner fin al juego de culpas entre Devs. y DBA.
Por eso me gusta mucho el Analizador de carga de trabajo en la nube de Spotlight. Puedo seleccionar un intervalo de tiempo (una hora, un día o un intervalo personalizado) y ver el Bloqueo -actividad relacionada para ese rango. Inmediatamente, ¡tengo una mejor comprensión de lo que está pasando! Puedo ver patrones de bloqueo, comparar la tasa de bloqueo a lo largo del tiempo con un intervalo de tiempo anterior, ver la tasa de bloqueo durante un período de tiempo específico y ver los KPI de bloqueo, como Bloqueo exclusivo, Compartido y Actualizar.
Así que ahora quiero llegar a la causa raíz:ahí es donde Árbol de dimensiones entra. Puedo desglosar y filtrar la información para un período de tiempo específico, lo que me permite ver la misma información en dimensiones más profundas, como Bases de datos , Usuarios , Programas y Sentencias SQL , mientras filtro el "ruido blanco" a medida que avanzo, identificando claramente la(s) fuente(s) de mi problema.
Aquí estoy mirando qué Bases de datos están experimentando la mayor cantidad de bloqueos durante el intervalo de tiempo:
Ahora, profundizaré en los Usuarios dentro de la base de datos seleccionada:
Luego, elegiré ver la lista de Declaraciones SQL causando el bloqueo que fue ejecutado por el Usuario seleccionado en la Base de datos seleccionada para el intervalo de tiempo especificado .
Ahora, puedo ver todo el Bloqueo información relacionada para la instrucción SQL seleccionada .
Entonces, si desea llegar al fondo de sus problemas de bloqueo, bloqueo e interbloqueo, le recomiendo que consulte Spotlight Cloud. Spotlight Cloud hace que sea más fácil que nunca investigar y comprender los problemas de bloqueo dentro de la base de datos y, en última instancia, garantizar que el código de su aplicación esté libre de interbloqueos.