Dimensione del registro virtuale di SQL Server


8

Sono in qualche modo un DBA accidentale, essendo uno sviluppatore che ha ereditato un paio di server di database (2005 e 2008) da qualcuno che sapeva poco sull'amministrazione del database e apparentemente aveva ancora meno interesse a saperne di più sull'argomento.

Sto imparando come sto andando e attualmente sto cercando di capire i file di registro delle transazioni.

Tutti i nostri database sono stati configurati con il semplice modello di recupero e il ripensamento automatico. Ho capito che l'uso dell'autoshrink è di solito un'idea orribile, ma ho capito che questo è stato fatto per impedire ai registri delle transazioni di crescere senza controllo. (Il ridimensionamento automatico riduce effettivamente i file di registro o solo il DB?)

Ho trovato questo su SQL Server 2012 e mi chiedevo se fosse vero per il 2005 e / o il 2008, e esattamente cosa significa: "Quando un database utilizza il modello di recupero semplice, il Motore di database tronca il registro delle transazioni dopo un checkpoint. [. ..] Il Motore di database attiva un checkpoint automatico nel modello di recupero semplice quando il registro virtuale diventa pieno al 70 percento. " Dove viene specificata la dimensione del registro virtuale?

Voglio disabilitare la riduzione automatica su tutti i database, ma prima di farlo, devo sapere che i file di registro non aumenteranno rapidamente di controllo.

Qualsiasi aiuto sarebbe molto apprezzato.


1
Leggi questo rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log e vedi se fa luce su ciò che sta succedendo.
Remus Rusanu,

Risposte:


6

Un singolo file di registro delle transazioni ha sia una dimensione fisica (che vedi sul disco), sia anche suddiviso all'interno del file fisico in sezioni logiche chiamate file di registro virtuali (VLF).

Sia la crescita automatica che la riduzione automatica operano sul file di registro delle transazioni fisico .

Il troncamento del registro delle transazioni (chiamato anche "cancellazione del registro") opera sulle sezioni logiche del registro delle transazioni (VLF) e non influisce sulla dimensione del file fisico. Questa parte è spesso oggetto di confusione.

Un file di registro deve sempre crescere per accogliere una transazione di grandi dimensioni; la disattivazione della riduzione automatica lascerà il file di registro con le dimensioni massime necessarie, anziché ridurne fisicamente le dimensioni.

Se non hai transazioni di grandi dimensioni, sarà sicuro disabilitare la riduzione automatica; i file di registro non crescerà senza limite come accadrebbe se il database, era in FULLo BULK_LOGGEDe non stavano prendendo i backup del log delle transazioni.

Questo comportamento è lo stesso per SQL Server 2005+.


Grazie, questo è quello che stavo cercando quando ho posto la domanda. Sono arrivato alle stesse conclusioni dopo aver letto la precedente risposta di Remus.
Petter Brodin,

2

Quindi, ecco quello che ho trovato dopo aver letto le altre risposte qui e aver fatto delle ricerche per conto mio:

D: "Il ridimensionamento automatico riduce effettivamente i file di registro o solo il DB?" A: Da quello che ho capito: sì, lo fa. Il ripensamento automatico è impostato a livello di database e influisce su tutti i file (visualizzato se si fa clic con il pulsante destro del mouse sul database -> proprietà -> file o se si esegue la query 1). La crescita automatica, tuttavia, funziona a livello di file.

D: "Dove viene specificata la dimensione del registro virtuale?" A: Vedi la risposta di Jon Seigel e il link pubblicato da Remus. Per visualizzare la dimensione del log fisico e logico, utilizzare la query 2

Un problema è che se il database ha attivato la modalità di ripristino completo, è stata ingrandita e quindi la modalità di ripristino è cambiata in semplice, non verrà attivato un checkpoint poiché il VLF si è avviato automaticamente. È possibile tentare di risolvere questo problema (consultare la risposta di Remus per potenziali problemi con head / tail dei file di registro) eseguendo la query 3, che ridurrà il file di registro fino alla dimensione in cui era originariamente creato.

Interrogazioni:

1)

SELECT name, physical_name AS current_file_location, DB_NAME(database_id) AS dbname
FROM sys.master_files
WHERE DB_NAME(database_id) = 'mydb'

2)

DECLARE @tmpt TABLE(
    dbname VARCHAR(255),
    logsize DECIMAL,
    logspaceused DECIMAL,
    stat INT
)

INSERT INTO @tmpt
    EXEC ('DBCC SQLPERF(LOGSPACE)')

SELECT * FROM @tmpt WHERE dbname LIKE 'mydb' ORDER BY logspaceused DESC

3)

checkpoint
DBCC SHRINKFILE('logfile_name')

2

Come indicato nella domanda, in SQL 2005 e 2008 dopo il checkpoint, anche il file di registro delle transazioni verrà troncato.

Il mio suggerimento sarebbe di impostare il modello di recupero al massimo e creare un processo per eseguire un backup dal file di registro delle transazioni. Questo processo può essere programmato sul database e troncerà il registro delle transazioni dopo aver eseguito il backup. Troncerà automaticamente il file di registro per te. Dai un'occhiata ai link qui sotto:

SQL Server 2005: http://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx

SQL Server 2008: http://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx


Sì, questo è il mio piano a lungo termine, ma per ora voglio solo sbarazzarmi di sbriciolatura automatica.
Petter Brodin,

Le modifiche sono che si desidera modificare al recupero COMPLETO, ma prima di valutare se è effettivamente necessario. Se hai bisogno di essere ripristinato il più vicino possibile a un disastro, allora lo fai. Se tornare all'ultimo backup completo (di solito di notte) va bene, la modalità di recupero SEMPLICE funzionerà bene per te.
cfradenburg,
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.