ho acceso l'isolamento dello snapshot nel mio database utilizzando il seguente codiceSnapshot su, ancora situazioni di stallo, ROWLOCK
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
e sbarazzato fuori un sacco di situazioni di stallo.
Ma il mio database produce ancora deadlock, quando ho bisogno di eseguire uno script ogni ora per ripulire oltre 100.000 righe.
- C'è un modo per evitare deadlock nel mio script di pulizia, devo impostare ROWLOCK in modo specifico in quella query?
- C'è un modo per aumentare il numero di blocchi a livello di riga utilizzati da un database?
- Come vengono promossi i blocchi? Dal livello della riga al livello della pagina fino al livello della tabella?
Il mio script di eliminazione è piuttosto semplice:
delete statvalue
from statValue,
(select dateadd(minute,-60, getdate()) as cutoff_date) cd
where temporaryStat = 1
and entrydate < cutoff_date
In questo momento sto cercando una soluzione rapida, ma una soluzione a lungo termine sarebbe ancora più bello.
Grazie mille, Patrikc
È possibile pubblicare le informazioni di traccia deadlock? Vedere http://www.dalun.com/blogs/10.13.2006.htm per un esempio di come farlo. – Justin
statValue ha un indice su entryDate? Hai esaminato il piano di query. Mi chiedo se stai facendo una scansione del tavolo. – automatic
indovina che qui non c'è spazio sufficiente per postare la traccia di deadlock qui ... entrytDate non ha un indice, sto usando StatValueID come indice. c'è un indice di ricerca nel piano di esecuzione e anche un indice di ricerca in cluster. – Patto