2009-05-30 15 views
5

Ho letto questo problema di blocco morto Quando le tabelle del database iniziano ad accumulare migliaia di righe e molti utenti iniziano a lavorare contemporaneamente sulla stessa tabella, le query SELECT sulle tabelle iniziano a generare conflitti di blocco e deadlock della transazione.come risolvere il problema del deadlock?

Questo problema di deadlock è correlato all'aggiornamento TransactNo? Se conosci questo problema, fammi sapere pls. Grazie in anticipo.

risposta

3

Non hai fornito abbastanza informazioni per rispondere direttamente alla tua domanda.

Ma la maggior parte dei blocchi e dei blocchi può essere ridotta (o persino eliminata) con gli indici "corretti" per coprire il carico di lavoro delle query.

A causa di un normale processo di manutenzione dell'indice pianificato?

Se avete SELECT s che non hanno bisogno di essere accurato al 100% (vale a dire consentire letture sporche ecc) allora si può eseguire alcuni SELECTS con WITH(NOLOCK), che è la stessa di un livello di isolamento della LEGGI UNCOMMITED. Nota: non sto suggerendo di inserire WITH(NOLOCK) ovunque; solo su quei SELETTI che non hanno bisogno di dati intatti al 100%.

4

Un deadlock può verificarsi per molte molte ragioni, quindi per prima cosa dovresti fare un po 'di compiti a casa se vuoi essere aiutato e dirci che cosa sta causando lo stallo, ad es. quali sono i lotti coinvolti nell'esecuzione del deadlock, quali risorse sono coinvolte e così via e così via. Il Profiler deadlock event graph è sempre un ottimo punto di partenza per le indagini.

Se mi azzarderei a sparare nell'oscurità, ciò che accade è che le tue query e gli indici non sono regolati correttamente, quindi la maggior parte delle tue operazioni di lettura (e forse alcune delle scritture) sono scansioni complete della tabella e quindi sono garantite per scontrarsi con aggiornamenti. Ciò può causare deadlocks by order of index access, deadlock per ordine di operazioni, deadlock tramite escalation e così via e così via.

Una volta identificata la causa del deadlock, è possibile prendere l'azione appropriata per rimuoverlo. I casi in cui l'azione corretta consiste nel ricorrere a letture sporche sono estremamente rari.

BTW Non sono sicuro di cosa intendi con "TransactNo updlock". Stai chiedendo in particolare lo S-U/U-S asymmetry of the U locks?

4

Un problema comune con alto isolamento è escalation di blocco deadlock dovuti alla il seguente scenario; cioè(Dove X è qualsiasi risorsa, come ad esempio una fila)

  • SPID una legge X - ottiene una lettura bloccare
  • SPID b legge X - ottiene un blocco di lettura
  • SPID a tentativi per modificare X - bloccati da b di leggere blocco, così deve aspettare
  • SPID B tenta di aggiornare X - bloccato da una serratura c'è di leggere, quindi deve aspettare

Deadlock! Questo scenario può essere evitato adottando più serrature:

  • SPID una legge X con (UPDLOCK) specificato - ottiene un blocco esclusivo
  • SPID b tenta di legge X - bloccato da una di blocco esclusivo, quindi deve aspettare
  • SPID un tentativo di aggiornare X - multa
  • ... (SPID un commit/involtini-back, e rilascia il blocco ad un certo punto)
  • ... (SPID B fa tutto ciò che voleva fare)
+0

L'escalation del blocco è quando un motore decide di rinunciare a prendere singoli blocchi granulari e decide di ottenere un blocco di livello più alto. L'escalation dei blocchi passa dai blocchi a livello di riga ai blocchi a livello di tabella. Un segno di stallo di una situazione di stallo in escalation dei blocchi è il coinvolgimento dei blocchi I (serrature di intenti) mentre l'escalation tenta di ottenere veri blocchi sul tavolo e sarà in conflitto con i vari blocchi di intenti (S-IX, S-IS) già posizionati su di esso . Il tuo esempio è la lettura canonica seguita dal caso di scrittura, non è correlata all'escalation. –

+0

Se ho usato la terminologia sbagliata, allora mi scuso; ma lo scenario (qualunque sia il nome) è un problema comune. –

3

mi butto i miei articoli e post nel mix su situazioni di stallo:

http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Deadlock/default.aspx

ho anche una serie di video sulla risoluzione dei problemi deadlocking su JumpstartTv.com così:

http://jumpstarttv.com/profiles/1379/Jonathan-Kehayias.aspx

I deadlock possono essere difficili da risolvere, ma a meno che non pubblichiate le informazioni sul deadlock grafico, non è comunque possibile fare di più che offrire collegamenti a post e informazioni sulla risoluzione dei problemi serrature.

8

I deadlock possono verificarsi per molte ragioni e talvolta la risoluzione dei problemi di deadlock può essere più un'arte che una scienza.

Quello che uso per trovare e sbarazzarsi di deadlock, al di fuori del semplice SQL Profiler, è uno strumento leggero che fornisce una rappresentazione grafica dei deadlock nel momento in cui si verificano. Quando vedi un punto morto, puoi approfondire e ottenere informazioni preziose. Deadlock Detector - http://www.sqlsolutions.com/products/sql-deadlock-detector

È uno strumento semplice, ma per me fa esattamente ciò che deve fare. Una cosa: la prima volta che l'ho usata, ho dovuto aspettare 15 minuti affinché lo strumento raccolga abbastanza metriche per iniziare a mostrare deadlock.

Problemi correlati