¿Cómo puedo hacer una copia de seguridad de una gran base de datos de SQL Server sin afectar el rendimiento?

18

Hemos recibido informes de consultas que se ejecutan lentamente o que se agota el tiempo de espera temprano en la mañana, y creo que el único trabajo que veo que se ejecuta podría afectar nuestro trabajo de copia de seguridad de la base de datos.

La base de datos en sí es de aproximadamente 300 GB, y el trabajo de copia de seguridad comienza a las 4:30 a.m. y no termina hasta poco después de las 7:00 a.m. La sintaxis actual de nuestro trabajo de respaldo es:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ es una partición en el servidor que contiene las bases de datos y las copias de seguridad de la base de datos.

Probablemente también se debe tener en cuenta que este es un servidor virtual, no un servidor independiente dedicado. Comenzamos a recibir quejas sobre retrasos durante el proceso de copia de seguridad justo después de cambiar a un servidor virtual, por lo que creo que puede estar relacionado.

¿Hay alguna manera de ejecutar este trabajo de copia de seguridad para que no afecte el rendimiento de la consulta mientras se ejecuta?

Estamos usando SQL Server 2005

Rachel
fuente

Respuestas:

21
  1. Aísle las E / S de respaldo del resto de las E / S en su sistema. Si bien puede llevar más tiempo y ser más propenso al hipo, hacer copias de seguridad a través de la red en lugar de hacerlo en un disco local puede ayudar a aliviar el impacto directo en la instancia. Incluso en una máquina virtual, debería poder exponer otro almacenamiento para que SQL Server pueda escribir en un subsistema de E / S diferente.
  2. Es poco probable que haga alguna diferencia, pero, si esto se ejecuta desde un trabajo, ¿por qué necesita usar la STATSopción? ¿Seguro de que necesita las otras opciones ( NOUNLOAD, NOSKIP, NOFORMAT)? No he realizado ninguna prueba exhaustiva de rendimiento en toda la matriz de opciones, pero en mi humilde opinión, solo debe usar las opciones que sabe que necesita.
  3. Ejecute sus copias de seguridad completas en un momento diferente que no interfiera con la actividad regular del usuario. Esto no siempre es posible, pero incluso en las operaciones las 24 horas del día, los 7 días de la semana, hay momentos de máxima actividad.
  4. Si cambia a 2008+, puede aprovechar la compresión de respaldo (Enterprise en 2008, Standard o Enterprise en 2008 R2 +). Si no puede pasar a 2008 o no tiene la edición adecuada, hay herramientas de respaldo de terceros que harán la compresión por usted, y todas son bastante buenas para eso. Desde 2008, he podido usar la compresión nativa, y he estado bastante satisfecho con el% de velocidad y compresión allí sin necesidad de invertir más en terceros. Pero con 2005 recuerdo haber tenido un buen éxito con Red-Gate SQL Backup ; Quest LiteSpeed también es bastante bueno, pero no tengo idea de qué tipo de esfuerzo se ha puesto desde la adquisición de Dell.
  5. Si sus bases de datos están en recuperación completa, podría pasar más tiempo entre las copias de seguridad completas, intercambiando eso sabiendo que si tiene que recuperarse hasta un punto en el tiempo, potencialmente tendrá más registros para restaurar. Puede combinar esta opción con la sugerencia de Ali a continuación de tomar diferenciales durante la semana: si tuviera que recuperarse el jueves, necesitaría restaurar 1 completo, 1 diferencial y los registros desde el diferencial.
  6. Si tiene una gran cantidad de datos obsoletos e inmutables, podría considerar alojarlos en una base de datos diferente con un plan de recuperación diferente, o al menos en diferentes grupos de archivos, y dividir sus operaciones de copia de seguridad de esa manera. Si tiene datos de referencia o de archivo que pueden hacerse de solo lectura, y si está en recuperación simple, puede moverlo a su propio grupo de archivos de solo lectura, hacer una copia de seguridad una vez y no tener que incluirlo en sus copias de seguridad nocturnas Nunca más. Vea estos temas de MSDN:

Realizar restauraciones poco sistemáticas

Ejemplo: restauración gradual de solo algunos grupos de archivos (modelo de recuperación simple)

Aaron Bertrand
fuente
¿Sería capaz de señalarme en la dirección correcta para obtener más información sobre cómo aislar las E / S de respaldo del resto de las E / S en el sistema? # 3 (cambiar el tiempo de las copias de seguridad) no es una opción ya que las 4:30 am es el mejor momento para ejecutar la copia de seguridad, y hemos hablado de actualizar a 2008 (# 4), pero no creo que eso suceda en cualquier momento.
Rachel
No estoy seguro de cómo orientarlo en la dirección correcta: ¿puede exponer otro almacenamiento a la máquina virtual?
Aaron Bertrand
Sí, creo que podemos exponer otro almacenamiento a la máquina virtual. Cuando dice "aislar las E / S de respaldo del resto de las E / S en el sistema", ¿se refiere a hacer una copia de respaldo en una unidad de red en lugar de una unidad de disco?
Rachel
3
No, me refiero a hacer una copia de seguridad en cualquier otro subsistema de E / S que no sea el disco donde también realiza simultáneamente lecturas y escrituras para la base de datos regular y la actividad tempdb. Esto podría ser una unidad de disco diferente en el mismo servidor, un recurso compartido en otra máquina, un LUN diferente en la SAN, un recurso compartido en un NAS, etc.
Aaron Bertrand
I La restauración gradual es una gran solución que no pensé, ¡gracias por publicarla!
Ali Razeghi
8

Este es un problema común, hay múltiples soluciones y realmente depende de su entorno. Vamos a verlos:

1- Compresión de respaldo sobre la marcha

En 2008, R1 Backup Compression estuvo disponible en Enterprise, en 2008R2 estuvo disponible en Standard. Esto es ENORME Esto le ahorrará mucho tiempo. Si puede actualizar, hágalo. Si no puede, consulte la utilidad HyperBak de RedGate o Quest LiteSpeed . Ambos tienen una prueba gratuita.

2- Copias de seguridad completas y diferenciales

Heredé una base de datos de producción de 2TB que causó muchos tiempos de espera para una importante empresa de Internet 24/7 que resolví. Permitimos copias de seguridad completas y diferenciales que nos ahorraron mucho tiempo. Tomaría una copia de seguridad completa el domingo a las 12:00 a.m. cuando la actividad era baja, y tomaría diferencias durante la semana. Esto ahorró mucho espacio. El trabajo de Diff es diferente al de los registros de transacciones, ya que funcionan en las páginas de la base de datos que se modificaron. Cualquier página cambiada es respaldada. Por lo tanto, realiza una restauración completa, luego la restauración de diferencias para agregar las páginas modificadas.

3- ¿Cuál es tu cuello de botella?

El análisis del cuello de botella es importante para diagnosticar. ¿Está haciendo una copia de seguridad en la misma matriz de discos que sus archivos de datos? ¿Se están vinculando sus archivos de datos? ¿Cuál es su DISK SEC / READ y DISK SEC / WRITE para los discos de datos durante las copias de seguridad? Modifiqué las copias de seguridad para crear 4 archivos. Cada archivo tiene su propio escritor de hilos y en nuestra SAN funcionó muy bien. Pruébalo, ahorré 45 minutos simplemente creando 4 archivos de respaldo. Solo asegúrese de que las métricas de su disco mencionadas anteriormente sean bajas. Obtenga una línea de base.

4- Replica a un servidor diferente y haz una copia de seguridad

Este es un poco avanzado. Debe asegurarse de que su base de datos replicada esté actualizada y necesita un monitoreo adecuado para eso. Si es así, puede hacer una copia de seguridad de la base de datos replicada.

Ali Razeghi
fuente
Solo un aviso sobre HyperBak, he tenido que no proporciona ganancias en VLDB cuando lo probé a fines de 2011. Hablé con RedGate y mencionaron que era un error, así que espero que ya esté resuelto. De todos modos, no creo que 300GB se consideren VLDB, pero ten cuidado si no funciona como se esperaba.
Ali Razeghi
-1

Puede usar estos parámetros:

TAMAÑO DE BLOQUEO : elija el tamaño 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536. (en KB)

BUFFERCOUNT : especifica el número total de buffers de E / S que se utilizarán para la operación de copia de seguridad. Puede especificar cualquier número entero positivo; sin embargo, un gran número de buffers puede causar errores de "falta de memoria" debido a un espacio de direcciones virtuales inadecuado en el proceso Sqlservr.exe. - de MSDN

MAXTRNASFERSIZE : es de 65536 bytes (64 KB) a 4194304 bytes (4 MB)

Filip Holub
fuente
-3

Intentalo. resolvió el problema de tiempo de espera expirado mientras db de gran tamaño

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub
Mainul
fuente
3
No creo que establecer el tiempo de espera en 500 ms solucione el problema de tiempo de espera expirado.
vijayp