Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché SET DEADLOCK_PRIORITY HIGH di SQL Server non dovrebbe essere rispettato?

Sembra che il comando che viene ucciso sia una FUNZIONE ALTER PARTITION, è interessante notare che ciò richiede un blocco SCH-M che è incompatibile con i blocchi SCH-S che vengono presi per tutto. Immagino che questa possa essere una causa.

Vedi michaeljswart.com/2013/04/the-sch -m-lock-è-malvagio .

Vedi anche questa descrizione di un deadlock SCH-M da una funzione ALTER PARTITION e una query che causa un aggiornamento delle statistiche in SQL 2014 e 2016, ma forse anche vero nel 2012:Deadlock si verifica quando si acquisisce un lucchetto SCH-M

Osservando il tuo grafico, un processo ha un blocco condiviso (aggiornamento) su sysschobjs ed è in attesa di un blocco SCH-S sul tuo tavolo. Il tuo processo ha un blocco SCH-M sulla tua tabella ed è in attesa di un blocco X su sysschobjs. sysschobjs è una tabella di base del sistema che si trova dietro sysobjects. Vedi la discussione qui Technet:query SQL che causa spesso deadlock

Spero che questo aiuti