Tamaño de registro virtual de SQL Server

8

Soy un DBA accidental, un desarrollador que heredó un par de servidores de bases de datos (2005 y 2008) de alguien que sabía poco sobre la administración de bases de datos y aparentemente tenía aún menos interés en aprender más sobre el tema.

Estoy aprendiendo sobre la marcha, y actualmente estoy tratando de resolver los archivos de registro de transacciones.

Todas nuestras bases de datos se han configurado con el modelo de recuperación simple y el autoencogimiento. He entendido que usar el autoencogimiento suele ser una idea horrible, pero tengo entendido que esto se hizo para evitar que los registros de transacciones se descontrolen. (¿Autoencogimiento realmente reduce los archivos de registro o solo el DB?)

Encontré esto sobre SQL Server 2012, y me preguntaba si es cierto sobre 2005 y / o 2008, y exactamente qué significa: "Cuando una base de datos usa el modelo de recuperación simple, el Motor de base de datos trunca el registro de transacciones después de un punto de control. [. ..] El Motor de base de datos activa un punto de control automático bajo el modelo de recuperación simple cuando el registro virtual se llena en un 70 por ciento ". ¿Dónde se especifica el tamaño del registro virtual?

Quiero deshabilitar la reducción automática en todas las bases de datos, pero antes de hacerlo, necesito saber que los archivos de registro no se descontrolarán rápidamente.

Cualquier ayuda sería muy apreciada.

Petter Brodin
fuente
1
Lea este rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log y vea si arroja alguna luz sobre lo que está sucediendo.
Remus Rusanu

Respuestas:

6

Un único archivo de registro de transacciones tiene un tamaño físico (que se ve en el disco) y también se divide en el archivo físico en secciones lógicas llamadas archivos de registro virtuales (VLF).

Tanto el crecimiento automático como la reducción automática operan en el archivo de registro de transacciones físicas .

El truncamiento del registro de transacciones (también llamado "borrado de registros") opera en las secciones lógicas del registro de transacciones (VLF) y no afecta el tamaño del archivo físico. Esta parte es frecuentemente objeto de confusión.

Un archivo de registro siempre debe crecer para acomodar una transacción grande; desactivar el encogimiento automático dejará el archivo de registro con su tamaño máximo necesario, en lugar de disminuir físicamente su tamaño.

Si no tiene transacciones grandes, será seguro deshabilitar la reducción automática; los archivos de registro no crecerán sin límite, como sucedería si la base de datos estuviese en FULLo BULK_LOGGEDno estuviera realizando copias de seguridad del registro de transacciones.

Este comportamiento es el mismo para SQL Server 2005+.

Jon Seigel
fuente
Gracias, eso es lo que estaba buscando cuando hice la pregunta. Llegué a las mismas conclusiones después de leer la respuesta anterior de Remus.
Petter Brodin
2

Entonces, esto es lo que he encontrado después de leer las otras respuestas aquí e investigar un poco por mi cuenta:

P: "¿El encogimiento automático realmente reduce los archivos de registro o solo el DB?" A: Por lo que entiendo: sí, lo hace. Autoshrink se establece en el nivel de la base de datos y afecta a todos los archivos (visto si hace clic derecho en la base de datos -> propiedades -> archivos, o si ejecuta la consulta 1). El crecimiento automático, sin embargo, funciona en un nivel por archivo.

P: "¿Dónde se especifica el tamaño del registro virtual?" R: Vea la respuesta de Jon Seigel y el enlace que Remus publicó. Para ver el tamaño de registro físico y lógico, use la consulta 2

Un problema es que si la base de datos ha activado el modo de recuperación completa, ha crecido a un tamaño grande y luego ha cambiado el modo de recuperación a simple, no se activará un punto de control ya que el VLF ha crecido automáticamente. Es posible intentar resolver esto (vea la respuesta de Remus para problemas potenciales con la cabeza / cola de los archivos de registro) ejecutando la consulta 3, que reducirá el archivo de registro al tamaño que tenía cuando se creó originalmente.

Consultas:

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')
Petter Brodin
fuente
2

Como mencionó en su pregunta, en SQL 2005 y 2008 después del punto de control, el archivo de registro de transacciones también se truncará.

Mi sugerencia sería configurar el modelo de recuperación en su totalidad y crear un trabajo para tomar una copia de seguridad del archivo de registro de transacciones. Este trabajo se puede programar en su base de datos y truncará el registro de transacciones después de tomar la copia de seguridad. Automáticamente truncará el archivo de registro por usted. Por favor, eche un vistazo a los siguientes enlaces:

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

Cielo
fuente
Sí, ese es mi plan a largo plazo, pero por ahora solo quiero deshacerme del autoencogimiento.
Petter Brodin el
Cambios si desea cambiarlos a recuperación COMPLETA, pero antes de evaluar si realmente es necesario o no. Si necesita ser restaurado lo más cerca posible de un desastre, entonces hágalo. Si volver a la última copia de seguridad completa (generalmente todas las noches) está bien, entonces el modo de recuperación SIMPLE funcionará bien para usted.
cfradenburg