Quanto sono importanti i VLF del registro delle transazioni per le prestazioni?


12

Quanto sono importanti i VLF quando si considerano le prestazioni del database? Cosa descriverebbe una situazione ottimale per i VLF?


Per ulteriori informazioni, vedere la mia domanda su dba.stackexchange.com/questions/25408/…
Max Vernon,

Fantastico - vedo che questo è utile per riferire sulle prestazioni
the_good_pony

1
@DBAWaffle Fare riferimento a: Esperimenti con VLF di SQL Server, parte 1 di Glenn Berry -> sqlskills.com/blogs/glenn/…
Kin Shah

Risposte:


17

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:

  • Ripristino lento (il ripristino è una fase durante il ripristino del database in cui le transazioni completate vengono scritte nelle pagine dei dati e le transazioni incomplete vengono ripristinate).
  • Prestazioni lente del lettore di log in un'impostazione del mirroring del database.
  • Rallentamento delle prestazioni durante la creazione dell'istantanea del database (si noti che include anche alcune funzioni DBCCpoiché 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 LOGINFOrestituirà 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 ):

  • Assicurati di essere l'unica connessione attiva nel database (quindi, fallo durante una finestra di manutenzione)
  • Eseguire il backup del registro delle transazioni su disco (utilizzando BACKUP LOG)
  • Esegui DBCC SHRINKFILEcon TRUNCATEONLYper ridurre il file di registro alla dimensione più piccola possibile.
  • Esegui ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizeper 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 .


Grazie, pensi che più VLF ostacolerebbero più ovviamente le prestazioni in un ambiente OLTP elevato in cui i dati vengono cambiati regolarmente, un gran numero di commit da passare?
the_good_pony

Un gran numero di VLF è davvero notevole solo nelle situazioni che ho descritto sopra (recupero, istantanee, mirroring). Potrebbero ostacolare un po 'le prestazioni in un ambiente OLTP, ma solo marginalmente.
Simon Righarts,

1
Per me, il recupero di oltre 20 ore è stato ciò che mi ha convinto dell'importanza di mantenere un conteggio VLF basso (inferiore a 1.000).
Max Vernon,

@SimonRigharts Sono curioso. Un gran numero di VLF influisce sulle normali prestazioni delle transazioni? O influisce solo su backup e ripristini?
Chris Aldrich,

@ChrisAldrich Potrebbe esserci un piccolo livello di overhead su una transazione se si estende su un limite VLF (ma se non c'è non ne ho sentito parlare), ma come dettagliato nella domanda l'unica volta che noterai effettivamente l'impatto di un gran numero di VLF è durante il recupero, il mirroring o le istantanee.
Simon Righarts,
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.