sql >> Base de Datos >  >> RDS >> Database

Mirando el rendimiento de la instantánea de la base de datos

Una instantánea de la base de datos proporciona una vista de solo lectura de una base de datos de SQL Server que es transaccionalmente coherente con el estado de la base de datos de origen en el momento en que se creó la instantánea de la base de datos. Existen varias razones para usar instantáneas de bases de datos, por ejemplo, generar informes con una base de datos duplicada, y DBCC CHECKDB también usa instantáneas de bases de datos internas de SQL Server 2005 en adelante.

Las instantáneas de la base de datos también brindan la capacidad de revertir todos los cambios que se han producido en una base de datos desde que se creó la instantánea de la base de datos, pero con un efecto secundario desagradable en el registro de transacciones de la base de datos sobre el que Paul escribió aquí.

Una de las cosas que no se suele considerar ni mostrar en torno a las instantáneas de la base de datos es el impacto en el rendimiento que tiene la instantánea para la carga de trabajo de escritura de la base de datos. El equipo de SQLCAT publicó un documento técnico para SQL Server 2005, Consideraciones sobre el rendimiento de las instantáneas de la base de datos bajo cargas de trabajo intensivas de E/S, que investigó los impactos en el rendimiento de las instantáneas de la base de datos y, después de trabajar recientemente con un cliente en el que las instantáneas de la base de datos provocaron problemas de rendimiento, quería pruebe SQL Server 2012 y determine si hubo cambios en la sobrecarga de las instantáneas de la base de datos siete años y tres versiones de SQL Server más tarde.

Configuración de prueba

Para realizar la prueba del efecto de las instantáneas de la base de datos en el rendimiento de la carga de trabajo de escritura, utilicé nuestro Dell R720 para realizar una inserción de 1 000 000 de filas en una nueva tabla en una versión ampliada de la base de datos AdventureWorks2012. La base de datos AdventureWorks2012 se creó con 8 archivos de datos repartidos en dos SSD Fusion-io ioDrive Duo de 640 GB, cada uno configurado como dos discos individuales de 320 GB en Windows, presentando un total de 4 discos. Para simplificar la explicación de la configuración, el diseño de almacenamiento utilizado para estas pruebas se muestra en la siguiente tabla:

Disco Configuración Uso
K 15K RAID 5 – 6 discos Instantánea
L Tarjeta Fusion-io 2:cara B Archivo de registro
M Tarjeta Fusion-io 2:cara A 4 archivos de datos
N Tarjeta Fusion-io 1:Lado A 4 archivos de datos
Q Tarjeta Fusion-io 1:cara B Tempdb
R LSI Nytro BLP4-1600 Instantánea

Tabla 1:Disposición y uso del disco del servidor

El almacenamiento para la instantánea de la base de datos era una matriz RAID-5 de seis unidades SAS de 15k RPM conectadas a través de iSCSI o una tarjeta LSI Nytro BLP4-1600 PCI-E.

La carga de trabajo de prueba usó la siguiente declaración SELECT INTO para generar una tabla de 1 000 000 de filas que se eliminó entre cada una de las pruebas.

SELECT TOP 1000000 *
INTO tmp_SalesOrderHeader
FROM Sales.SalesOrderHeaderEnlarged;

Las pruebas se programaron para medir la duración sin una instantánea de la base de datos y, luego, la duración con una instantánea de la base de datos creada en cada uno de los dispositivos de almacenamiento para medir la degradación del rendimiento provocada por la escritura de cambios de página en el archivo disperso de la instantánea de la base de datos. Las pruebas también se ejecutaron utilizando dos instantáneas de bases de datos en el mismo dispositivo de almacenamiento para determinar cuál podría ser la sobrecarga de tener instantáneas de bases de datos adicionales para las operaciones de escritura duplicadas que potencialmente deben realizarse.

Resultados

Cada configuración de prueba se ejecutó diez veces y la duración promedio, convertida de milisegundos a segundos para facilitar la visualización, se muestra en la Figura 1, para 0, 1 o 2 instantáneas de la base de datos.


Figura 1:Duración de la instantánea

Las pruebas de referencia sin instantáneas de la base de datos se ejecutaron en promedio en 1,8 segundos, e incluso cuando el almacenamiento de los archivos de la instantánea de la base de datos era equivalente en rendimiento, la existencia de una sola instantánea de la base de datos impuso una sobrecarga al rendimiento de escritura de la base de datos. La sobrecarga de la segunda instantánea de la base de datos es menor que tener la primera instantánea de la base de datos en cada una de las pruebas, aunque los discos de 15 000 RPM tuvieron muchas más dificultades para mantenerse al día con la carga de trabajo de escritura agregada de la segunda instantánea de la base de datos para la base de datos.

El rendimiento de la tarjeta LSI Nytro inicialmente me sorprendió ya que también era un SSD PCI-X. Sin embargo, después de discutir los resultados con Glenn, mencionó que la compresión del controlador Sandforce y el rendimiento de escritura más lento para datos aleatorios de baja compresión de sus pruebas anteriores en la unidad. Sin embargo, superó fácilmente a los medios giratorios.

Antes de ejecutar las pruebas, me interesaba saber qué tipos de espera ocurrirían durante las pruebas, así que, como parte de la configuración de la prueba, borré sys.dm_os_wait_stats con DBCC SQLPERF y capturé la salida del DMV para cada ejecución de prueba en una tabla. Las principales esperas para las configuraciones de instantáneas individuales fueron PREEMPTIVE_OS_WRITEFILE y WRITE_COMPLETION, como se muestra en la Figura 2, para 1 o 2 instantáneas de base de datos.


Figura 2:Instantánea de esperas principales

Uno de los elementos interesantes fue la adición de FCB_REPLICA_WRITE espera cuando se crea una segunda instantánea. Después de revisar los resultados de espera de la instantánea de la base de datos única y volver a ejecutar un par de rondas de pruebas, esta espera nunca ocurre para una instantánea única y solo ocurre cuando existe más de una instantánea y está asociada con la copia de las páginas en los archivos de instantáneas de la base de datos. Los tiempos de espera para PREEMPTIVE_OS_WRITEFILE tienen una tendencia similar a los aumentos en la duración de la ejecución para cada una de las configuraciones.

Con estos resultados en mente, al revisar un sistema que utiliza la metodología de Esperas y Colas, ver este tipo de espera con valores más altos podría valer la pena investigar si existen o no instantáneas de base de datos para alguna de las bases de datos en el servidor.

Conclusión

Cuando se usan instantáneas de bases de datos, incluso en SQL Server 2012, hay una sobrecarga asociada con las escrituras adicionales necesarias para copiar páginas de datos en archivos dispersos para las instantáneas. Si el uso de instantáneas de la base de datos es parte de su configuración general, realmente tendría cuidado al planificar el subsistema de E/S para cumplir con los requisitos de carga de trabajo para la actividad de E/S simultánea en los archivos dispersos de la instantánea de la base de datos.

A partir de los resultados de estas pruebas, incluso consideraría colocar instantáneas de bases de datos en SSD antes que tempdb para el rendimiento de escritura y también para un menor impacto en el rendimiento del mantenimiento de instantáneas.

Como siempre, su kilometraje puede variar y seguramente querrá probar el rendimiento de cualquier configuración antes de ponerla en producción.