Quanto sono importanti i VLF quando si considerano le prestazioni del database? Cosa descriverebbe una situazione ottimale per i VLF?
Quanto sono importanti i VLF quando si considerano le prestazioni del database? Cosa descriverebbe una situazione ottimale per i VLF?
Risposte:
Che cos'è un file di registro virtuale?
SQL Server divide il file di registro delle transazioni per ciascun database in blocchi più piccoli, chiamati "file di registro virtuali" (o VLF in breve). La loro funzione principale è come marcatori di troncamento in un backup del registro, ovvero SQL Server cancella (e contrassegna i VLF disponibili solo per il riutilizzo) completamente vuoti. MSDN ha un pezzo su Transaction Log - Physical Architecture .
Cosa determina il numero di VLF?
Ogni volta che cresce un file di registro (sia tramite crescita automatica che manuale), la nuova sezione del file di registro viene divisa in un numero di VLF, basandosi esclusivamente sulla dimensione della nuova sezione (il registro delle transazioni esistente viene lasciato da solo). Pertanto, le impostazioni di crescita automatica di piccole dimensioni (ovvero la crescita automatica del 10% predefinita) determineranno la creazione di un numero elevato di VLF.
Quali sono le implicazioni di un gran numero di VLF?
Il problema principale che causa un gran numero di VLF sono:
DBCC
poiché utilizzano le istantanee del database in background per facilitare i controlli di coerenza senza bloccare).Come posso sapere quanti VLF ha il mio database?
DBCC LOGINFO
restituirà 1 riga per ogni VLF nel registro delle transazioni del database. Questa domanda ha un paio di script utili per l'applicazione in tutti i database su un server.
Quanti VLF sono troppi?
Questa è una chiamata di giudizio che dovrai fare da solo. La mia regola personale è che sotto i 50 non vale la pena fare scherzi, e oltre 100 (o giù di lì) e aggiusto le impostazioni di crescita automatica e prendo nota mentale di (nella finestra di manutenzione successiva) ridurre e ricrescere il registro (come sotto) .
Aiuto! Ho undici miliardi di VLF e il recupero del mio database dura tutto il giorno!
Breve descrizione (dal blog di Kimberly Tripp ):
BACKUP LOG
)DBCC SHRINKFILE
con TRUNCATEONLY
per ridurre il file di registro alla dimensione più piccola possibile.ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsize
per ridimensionare il log delle transazioni eseguendo il backup in un unico passaggio **.** Nota: se si dispone di un file di registro molto grande (decine di GB o più), è possibile ridimensionare in più passaggi per ottenere un numero appropriato di VLF con dimensioni adeguate per evitare backup di registro eccessivamente "pesanti". Poiché i VLF sono l'unità di troncamento, determinano anche le dimensioni del backup del registro, come dettagliato nel blog di Kim .