Blocco degli oggetti sequenza
Abbiamo riscontrato un problema con un oggetto sequenza che abbiamo chiamato molto. Viene utilizzato per assegnare un valore prima che un record venga inserito in una tabella.
Oggi ho visto che oltre 700 sessioni (tutte cercavano di ottenere il valore successivo dall'oggetto sequenza) venivano bloccate da una sessione che stava tentando di ottenere il valore successivo dall'oggetto sequenza con un tipo di attesa di PAGELATCH_EX. Le altre oltre 700 sessioni erano in attesa su LATCH_EX.
Quando ho esaminato la risorsa di attesa, si riferiva a sys.sysobjvalues.
Sono curioso di sapere perché questo potrebbe accadere e se altre persone l'hanno visto. Di recente abbiamo modificato il valore CACHE per questa sequenza da DEFAULT (50) a 200. Ho pensato che ciò avrebbe migliorato le prestazioni della chiamata alla sequenza dato che la usiamo così pesantemente, ma forse mi sbagliavo.
Stiamo usando SQL Server 2012 SP4.
Risposte
Le altre oltre 700 sessioni erano in attesa su LATCH_EX.... Di recente abbiamo modificato il valore CACHE per questa sequenza da DEFAULT (50) a 200.
Se hai 700 sessioni di attesa, il mio primo pensiero è che la cache deve essere molto più alta dato il carico di lavoro. Consiglierei di provare qualcosa nell'intervallo 500-1000 (e magari continuare ad aumentare) fino a quando le attese non si stabilizzano o diminuiscono. Dovrebbe esserci un punto debole che puoi trovare con un valore di cache maggiore.