2011-09-01 14 views
5

¿Alguien puede ayudarme a leer/entender este gráfico de interbloqueo?Lectura del gráfico de interbloqueo SQL

No entiendo por qué el proceso 75 solicita un bloqueo en un objeto que ya tiene bloqueado?

Deadlock graph

+0

puede enviar la respuesta "show innoDB status" será más informativo. Debe contener el último interbloqueo – varela

+0

@varela - Esto es SQL Server. jaques ¿Qué versión? Parece un problema de paralelismo. –

+0

@Martin Smith. SQL Server 2008 – Jacques

Respuesta

7

De acuerdo con un artículo en el blog que he encontrado la existencia de un "intercambio de eventos" indica que el origen del problema puede ser paralelismo en su consulta.

Today's Annoyingly-Unwieldy Term: "Intra-Query Parallel Thread Deadlocks"

El artículo anterior entra en mucho más detalle, sin embargo, el remate es:

Solución # 1: añadir un índice o mejorar la consulta para eliminar la necesidad de paralelismo. En la mayoría de los casos, el uso de paralelismo en una consulta indica que tiene un escaneo, clasificación o unión muy grande que no es compatible con los índices adecuados. Si sintoniza la consulta, a menudo encontrará que tiene un plan mucho más rápido y eficiente que no utiliza el paralelismo y, por lo tanto, no está sujeto a este tipo de problema. Por supuesto, en algunas consultas (consultas tipo DSS/OLAP, en particular) puede ser difícil eliminar todos los escaneos grandes.

Solución # 2: forzar la ejecución de un solo subproceso con una "opción (MAXDOP 1)" sugerencia de consulta al final de la consulta. Si no puede modificar la consulta, puede aplicar la sugerencia a cualquier consulta con una guía de plan.

Puede intentar esto para ver si hay alguna mejora.

+0

Gracias, logré identificar y mejorar una consulta de ejecución lenta y no se bloquea desde entonces. ¿No estás seguro de cómo evitar esto en el futuro? ¿Y por qué SQL Server trata de ser inteligente si existe la posibilidad de que se convierta en una situación de estancamiento? (E.G ¿Por qué usar el paralelismo?) – Jacques

+0

El enlace al que se hace referencia se centra en el punto muerto intra-consulta de evento de intercambio "puro" donde hay solo un SPID (por lo tanto, "intra-consulta"). El gráfico de interbloqueo de preguntas incluye un evento de intercambio _plus_ un interbloqueo más tradicional que implica 2 consultas (otro SPID). He leído que los eventos de intercambio de interbloqueo aislados pueden arreglarse ellos mismos (ya que pueden deberse a errores internos) por lo que el foco debe estar en los otros objetos compartidos - bloqueos de página en este caso. – crokusek

Cuestiones relacionadas