Published on

August 15, 2020

Optimizando los horarios de copia de seguridad de SQL Server

Problema: Un servidor de copia de seguridad centralizado para respaldar SQL Server a veces puede convertirse en un cuello de botella de recursos en el flujo de copia de seguridad si tiene muchos servidores escribiendo copias de seguridad de bases de datos al mismo tiempo. Esto puede llevar a una duración de copia de seguridad más larga y un posible impacto en otros procesos del servidor.

Solución: Una forma de reducir la contención del servidor de copia de seguridad y potencialmente hacer que las copias de seguridad de SQL Server sean más rápidas es reprogramar los trabajos de copia de seguridad. Al espaciar las operaciones de copia de seguridad y distribuirlas en días de la semana y horarios diferentes, puede evitar la superposición de horarios de copia de seguridad y mejorar el rendimiento general de la copia de seguridad.

Aquí hay un script que se puede utilizar para auditar el horario de copia de seguridad completa y obtener una comprensión clara de cómo espaciar los trabajos de copia de seguridad:

SELECT
  bkup.compressed,
  COUNT(*) AS total_dbs,
  bkup.[weekday],
  DATEDIFF(MINUTE, MIN(bkup.backup_start_date), MAX(bkup.backup_finish_date)) AS duration_minutes,
  AVG(speed_mb_sec) avg_mb_sec,
  MIN(bkup.backup_start_date) AS backup_began,
  MAX(bkup.backup_finish_date) AS backup_finished
FROM (SELECT
  DATENAME(WEEKDAY, bs.backup_start_date) AS [weekday],
  bs.backup_start_date,
  bs.backup_finish_date,
  speed_mb_sec = (bs.compressed_backup_size / 1048576.0) /
  CASE
    WHEN DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date) > 0 THEN DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date)
    ELSE 1
  END,
  CASE
    WHEN (bs.backup_size % bs.compressed_backup_size) > 0 THEN '1'
    ELSE '0'
  END [compressed],
  RANK() OVER (PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC) AS rank
FROM msdb..backupset bs (NOLOCK)
WHERE 1 = 1
AND bs.type = 'd' --copias de seguridad completas
AND bs.is_copy_only = 0
AND bs.database_name NOT IN ('master', 'msdb', 'model') --excluye servidores sin bases de datos de usuario
AND bs.backup_start_date > DATEADD(DAY, -7, GETDATE()) --copias de seguridad en la última semana
--and datename(weekday,bs.backup_start_date) = 'Monday' -- filtrar por día
) bkup
WHERE bkup.rank = 1 -- última copia de seguridad completa
GROUP BY bkup.compressed,
         bkup.[weekday];

Este script le proporcionará información sobre la última vez que se ejecutaron copias de seguridad completas en el servidor, el número de copias de seguridad comprimidas, la duración total de la copia de seguridad y las horas de inicio y finalización de las copias de seguridad.

Al analizar esta información, puede identificar horarios de copia de seguridad superpuestos y realizar ajustes para distribuir las operaciones de copia de seguridad. Esto puede ayudar a reducir la contención del servidor de copia de seguridad, mejorar el rendimiento de la copia de seguridad y garantizar el cumplimiento de su acuerdo de Punto de Recuperación Objetivo (RPO).

Recuerde también considerar habilitar la compresión de copia de seguridad en su SQL Server para optimizar aún más el rendimiento de la copia de seguridad. La compresión de copia de seguridad ha estado disponible desde SQL Server 2008 y puede reducir significativamente el tamaño y la duración de las copias de seguridad.

Al implementar estas estrategias, puede optimizar los horarios de copia de seguridad de su SQL Server y mejorar el rendimiento general de la copia de seguridad.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.