Pregunta

Tengo una situación peculiar. Tengo tablas a las que se accede constantemente diferentes partes de nuestro código y miles de clientes, por lo que empleamos el uso de transacciones al hacer actualizaciones e inserciones simples en nuestras tablas. El problema es que seguimos recibiendo errores de punto muerto. ¿Alguien tiene alguna idea de cómo puedo aliviar este problema?

¿Fue útil?

Solución

Los puntos muertos pueden surgir por muchas razones y combinaciones de las mismas:

  • Mal diseño de esquema

  • Índices incorrectos para la carga de trabajo de su consulta

  • TSQL mal escrito

  • Niveles de aislamiento de transacciones agresivos y/o transacciones abiertas de larga duración

  • Patrones de acceso de aplicación deficiente

  • Hardware de baja especificación o configurado incorrectamente

Todos estos son comunes.

Te sugiero que leas

Otros consejos

Este problema no es demasiado peculiar: es típico cuando los desarrolladores no saben mucho sobre cómo funciona el bloqueo, y solo piensan en las transacciones como 'cajas negras' y esperan que sus soluciones se escala.

Mitch tiene razón en los comentarios sobre pagar a alguien que es un experto: este es un problema que es demasiado grande para cualquier solución. Deberá estar armado con rastros de consultas que causan puntos de punto y tendrá que analizar todo, desde sus índices hasta el diseño de su mesa, hasta sus niveles de aislamiento de transacciones, hasta los patrones de consulta.

Sugiero comenzar con SQL Server Profiler y configurar un rastro que generará un gráfico de punto muerto. Eso al menos identificará sus consultas de problemas y los recursos que están en punto muerto. Configure otro rastro que busque consultas lentas (> digamos, 100 ms) y acelere también. Cuanto más tiempo funcionen sus consultas, mayor será la probabilidad de contención de bloqueo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top