Domande sull'archivio versioni tempdb


9

Oggi abbiamo riscontrato un errore:

Errore: 3967, gravità: 17

e da quello che posso dire è fondamentalmente 'store versione completa'. Ciò ha sollevato alcune domande a cui ho avuto problemi a rispondere, poiché nel mio negozio non abbiamo mai avuto questo errore prima:

  • Se esiste una dimensione massima predefinita (basata sulla dimensione totale del tempdb o altro), è dinamica?

  • C'è un'impostazione che lo renderebbe dinamico se non lo fosse?

  • Possiamo impostare avvisi basati su questo? (ad esempio DMV da utilizzare per tracciare le dimensioni, ecc.)

Risposte:


7

La gravità 17 indica che SQL Server ha esaurito una risorsa richiesta. In genere questo viene visualizzato quando un database esaurisce lo spazio. In questo caso, sembra che tempdb venga utilizzato per le righe della versione di isolamento dello snapshot di cui è stato eseguito il commit per una query che doveva essere riversata su tempdb.

Questo potrebbe essere abbastanza comune se tempdb ha dimensioni massime limitate e si tenta di eseguire una query scritta male che, ad esempio, esegue un cross-join molto grande.

È possibile utilizzare questa query per visualizzare le dimensioni correnti dell'archivio versioni in tempdb:

SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';

Technet ha un interessante articolo sull'utilizzo dello store delle versioni su https://technet.microsoft.com/en-us/library/cc966545.aspx#EDAA

Questa pagina MSDN menziona l'errore 3967:

Quando tempdb esaurisce lo spazio, Motore di database impone la riduzione degli archivi delle versioni. Durante il processo di riduzione, le transazioni in esecuzione più lunghe che non hanno ancora generato versioni di riga vengono contrassegnate come vittime. Un messaggio 3967 viene generato nel registro errori per ogni transazione vittima. Se una transazione è contrassegnata come vittima, non può più leggere le versioni delle righe nell'archivio versioni. Quando tenta di leggere le versioni di riga, viene generato il messaggio 3966 e viene eseguito il rollback della transazione. Se il processo di riduzione ha esito positivo, lo spazio diventa disponibile in tempdb.

Nessuna delle pagine che ho collegato sopra contiene consigli espliciti sulla dimensione massima dell'archivio versione in tempdb, il che mi porta a credere che l'unica limitazione sia la dimensione massima configurata del tempdb stesso, meno lo spazio utilizzato in tempdb per altri oggetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.