Domanda

Ho qualche divertente deadlock causato da una stupida semplice query SQL UPDATE, su una tabella semplice, in modalità predefinita "LEGGI IMPEGNATO" transazione.

UPDATE table SET column=@P1 WHERE PK=@P2

La colonna PK è varchar (11) , ha un indice cluster su di esso. nessuna relazione trigger o tabella ... ecc. sulla tabella.

Ho fatto qualche controllo e ho scoperto che il deadlock si verifica su " PAGINA " livello, non a livello ROW / record. Quindi, trovo che per ogni query di aggiornamento, siano necessari 100 (e più) blocchi PAGE. (Non ha senso per me perché sto aggiornando una riga alla volta)

Esiste un modo per impedire il verificarsi di deadlock? Oppure, come è possibile ridurre il numero di blocchi necessari per l'aggiornamento di una singola riga senza utilizzare il cursore?

-

Grazie per il tuo suggerimento.

Ho provato a ricostruire l'indice alcune volte, con un fattore di riempimento alto e basso. Avevo provato a far aggiornare i processi in posizioni / sezioni diverse. Ma nulla è migliorato o peggiore.

-

Ho provato SQL Server Profiler. Ho catturato alcuni "Lock: Deadlock Chain" e " Lock: deadlock " ;, ma no " Deadlock Graph " fu catturato. Entrambe le parti stanno eseguendo la query di aggiornamento semplice in modalità di commit automatico, read commit.

Lock:Deadlock Chain 17887475    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                    Lock:Deadlock Chain 17887476    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438102                                                                                                                                                                                                                                                          265006271       0   0X56AF060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887477    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                    Lock:Deadlock Chain 17887478    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426206                                                                                                                                                                                                                                                           265006240       0   0XDE80060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887479    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426206                                                                                                                                                                                                                                                          265006271       0   0XDE80060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887480    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                    Lock:Deadlock Chain 17887481    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426066                                                                                                                                                                                                                                                           265006240       0   0X5280060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887482    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426066                                                                                                                                                                                                                                                          265006271       0   0X5280060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887483    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                    Lock:Deadlock Chain 17887484    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425614                                                                                                                                                                                                                                                          265006271       0   0X8E7E060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887485    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                    Lock:Deadlock Chain 17887486    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426687                                                                                                                                                                                                                                                          265006271       0   0XBF82060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887487    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                
Lock:Deadlock Chain 17887488    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425392                                                                                                                                                                                                                                                          265006271       0   0XB07D060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887489    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                
Lock:Deadlock Chain 17887491    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                
Lock:Deadlock Chain 17887493    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                
Lock:Deadlock Chain 17887494    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:435792                                                                                                                                                                                                                                                          265006271       0   0X50A6060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock Chain 17887495    1       0X01    4   myserver        2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                                                                 0           971497  102 - Resource type Exchange                
Lock:Deadlock Chain 17887496    1       0X01    4   myserver        2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438206                                                                                                                                                                                                                                                          265006271       0   0XBEAF060001000000000000001B0006        27              0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971497  101 - Resource type Lock                
Lock:Deadlock   17887497        myuser  0XCD85FBB269700B4AA2F4E8579D118999  209 myserver    myuser  2008-11-28 10:16:45.930 1:426206    265006271   myapps  0   0XDE80060001000000000000001B0006    123 27  281 2008-11-28 10:16:46.210 myclient    0 - LOCK    4 - U           0   72057594040352768   1 - TRANSACTION 0   6 - PAGE    mydatabase  971498                  
È stato utile?

Soluzione 6

Devo finalmente risolvere il problema usando cusror in una procedura memorizzata.

Ma è ancora interessante sapere come avviene il blocco PAGE e come risolverlo.


Dopo qualche altra ricerca su Google, ci sono altre persone che hanno lo stesso problema e (dal forum MSDN) suggeriscono di disattivare il parallelismo in SQL Server 2005 ma non ho mai avuto la possibilità di provare.

Altri suggerimenti

Hai 2 opzioni per ridurre l'escalation dei blocchi:

1) aggiungi il suggerimento WITH (ROWLOCK) per chiedere al server sql di eseguire blocchi di granularità più fini (il tuo chilometraggio può variare:

  

Tabella AGGIORNAMENTO CON (ROWLOCK) SET   colonna = @ P1 DOVE PK = @ P2; Mentre PK   varchar (11), ha un indice cluster attivo   esso. nessuna relazione di attivazione o tabella ... ecc   sul tavolo.

2) aggiorna le righe in ordine casuale, riducendo la probabilità che i blocchi di riga vengano convertiti in blocchi di pagine.

Inoltre, assicurarsi che gli indici su quella tabella siano aggiornati può spesso ridurre il blocco. Come lasciare un fattore di riempimento (90 è buono) se hai intenzione di fare molti inserti.

Hai eseguito una traccia del profilo?

Avvia SQL Profiler e crea una traccia standard con questi eventi aggiunti:

  • Blocchi: grafico deadlock
  • Locks: Lock: Deadlock Chain
  • Serrature: Lock: Escalation

Dovrebbe fornire dettagli sulla natura precisa dello stallo.

Nel caso normale e semplice questo tipo di begavior non si vede spesso. La mia domanda per te è questa: cosa c'è "dall'altra parte" di questa transazione? Qual è l'altra istruzione di aggiornamento in esecuzione e che causa questo deadlock? Questo, credo, sarà la chiave per diagnosticare questo problema. Onestamente, i miei soldi sono su quest'altro, fino a quel momento la causa non identificata non identificata. E ora sono a Las Vegas ...

Quali istruzioni selezionate dalla stessa tabella E dagli stessi record si verificano all'interno della stessa transazione prima dell'istruzione update? Utilizzare i suggerimenti di blocco (updlock) in queste selezioni.

hai degli AGGIORNAMENTI sul tavolo? In tal caso, l'azione del trigger potrebbe causare il deadlock.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top