Aiuto a deadlock necessario per favore
-
25-09-2019 - |
Domanda
Ho una situazione peculiare. Ho tabelle a cui si accede costantemente da diverse parti del nostro codice e migliaia di clienti e quindi abbiamo impiegato l'uso delle transazioni quando facciamo semplici aggiornamenti e inserti sulle nostre tabelle. Il problema è che continuiamo a ottenere errori di deadlock. Qualcuno ha idea di come posso alleviare questo problema?
Soluzione
I deadlock possono sorgere per molte ragioni e combinazioni:
Progettazione di schema scadente
Indici errati per il carico di lavoro delle query
TSQL scritto male
Livelli di isolamento delle transazioni aggressive e/o transazioni aperte a lungo termine
Scarsi modelli di accesso all'applicazione
Specifiche basse o hardware configurato in modo errato
Tutti questi sono comuni.
Ti suggerisco di leggere
Altri suggerimenti
Questo problema non è troppo peculiare: è tipico quando gli sviluppatori non sanno molto su come funziona il blocco e pensano solo alle transazioni come "scatole nere" e si aspettano che le loro soluzioni si ridimensionano.
Mitch ha ragione nei commenti sul pagamento di qualcuno che è un esperto - questo è un problema troppo grande per qualsiasi soluzione su così. Dovrai essere armato di tracce di query che causano deadlocks e dovrai analizzare tutto, dai tuoi indici alla progettazione della tabella, ai livelli di isolamento delle transazioni, ai tuoi modelli di query.
Suggerisco di iniziare con SQL Server Profiler e di impostare una traccia che genererà un grafico a deadlock. Ciò identificherà almeno le tue domande sul problema e le risorse che sono deviazioni. Imposta un'altra traccia alla ricerca di query lente (> diciamo, 100 ms) e accelera anche quelle. Più a lungo le tue query eseguono, maggiore è la probabilità di contesa a blocchi.