2011-09-01 9 views
5

Qualcuno può aiutarmi a leggere/comprendere questo grafico di deadlock?Lettura del grafico di deadlock SQL

Non capisco perché process 75 richieda un blocco su un oggetto su cui ha già un blocco?

Deadlock graph

+0

puoi inviare la risposta "mostra stato innoDB" sarà più informativo. Dovrebbe contenere l'ultimo deadlock – varela

+0

@varela - Questo è SQL Server. jaques Quale versione? Sembra un problema di paralellismo. –

+0

@ Martin Smith. SQL Server 2008 – Jacques

risposta

7

Secondo un articolo del blog che ho trovato l'esistenza di un "Exchange Event" indica che la fonte del problema può essere parallelismo nella query.

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

L'articolo di cui sopra va in modo molto più dettagliato, ma la battuta finale è:

Soluzione # 1: aggiungere un indice o migliorare la query per eliminare la necessità di parallelismo. Nella maggior parte dei casi, l'uso del parallelismo in una query indica che si dispone di una scansione, ordinamento o join molto ampia non supportata da indici appropriati. Se si ottimizza la query, si scoprirà spesso che si ottiene un piano molto più rapido ed efficiente che non utilizza il parallelismo e pertanto non è soggetto a questo tipo di problema. Ovviamente, in alcune query (in particolare le query di tipo DSS/OLAP) può essere difficile eliminare tutte le scansioni di grandi dimensioni.

Soluzione n. 2: Forza l'esecuzione a thread singolo con un hint di query "OPTION (MAXDOP 1)" alla fine della query. Se non è possibile modificare la query, è possibile applicare il suggerimento a qualsiasi query con una guida di piano.

Si potrebbe provare questo per vedere se c'è qualche miglioramento.

+0

Grazie, sono riuscito a identificare e migliorare una query in esecuzione lenta e senza blocchi da allora. Non sai come prevenirlo in futuro? E perché il server SQL tenta di essere intelligente se esiste la possibilità che si trovi in ​​una situazione di deadlock? (E.G Perché usare il parallelismo?) – Jacques

+0

Il collegamento referenziato si concentra sul deadlock "puro" dell'evento di scambio all'interno della query in cui vi è un solo SPID (quindi "intra-query"). Il grafo di deadlock delle domande include un evento di scambio _plus_ un deadlock più tradizionale che coinvolge 2 query (un altro SPID). Ho letto che gli eventi di stallo a deadlocking isolati possono risolversi da soli (poiché potrebbero essere dovuti a bug interni) quindi l'attenzione dovrebbe essere sugli altri oggetti condivisi - i blocchi di pagina in questo caso. – crokusek

Problemi correlati