Pues bien, en SQL Server 2019 hay una nueva funcionalidad denominada “Accelerated Database Recovery” (ADR) la cual nos permitira realizar este tipo de mejoras.
En este post vamos a probar esta nueva funcionalidad de SQL Server 2019, en mi caso estoy usando SQL Server CTP 3.1 montado en un docker con la imagen de Linux Ubuntu.
Funcionamiento del TLOG sin ADR
La siguiente imagen contiene el funcionamiento del TLOG de una base SQL Server sin usar ADR (en otras palabras hasta el momento sin tener SQL Server 2019)
Funcionamiento del TLOG usando ADR
La siguiente imagen ilustra el funcionamiento del TLOG usando la nueva funcionalidad de SQL Server ADR
Haciendo pruebas
Ahora probaremos la funcionalidad de ADR haciendo un Rollback en una transaccion
Paso 1: Creando base de datos
CREATE DATABASE TRIGGERDB;
GO
USE TRIGGERDB
GO
Paso 2: Creando una tabla y llenando registros en una transacción
SET STATISTICS TIME ON
BEGIN TRANSACTION
DROP TABLE IF EXISTS t1;
SELECT TOP 5000000 t1.*
INTO t1
FROM sys.all_objects AS t1
CROSS JOIN sys.all_objects AS t2
CROSS JOIN sys.all_objects AS t3
El tiempo de procesamiento en mi equipo fue el siguiente
SQL Server Execution Times:
CPU time = 6600 ms, elapsed time = 7679 ms.
Paso 3: Haciendo un Rollback de la transacción
ROLLBACK TRAN
Hacer este proceso de Rollback ha llevado el siguiente tiempo:
SQL Server Execution Times:
CPU time = 910 ms, elapsed time = 4445 ms.
Paso 4: Activar ADR para la base de datos
ALTER DATABASE triggerdb
SET ACCELERATED_DATABASE_RECOVERY = ON;
GO
Paso 5: volvemos a hacer el insert en la transacción
BEGIN TRANSACTION
DROP TABLE IF EXISTS t1;
SELECT TOP 5000000 t1.*
INTO t1
FROM sys.all_objects AS t1
CROSS JOIN sys.all_objects AS t2
CROSS JOIN sys.all_objects AS t3
El insert usando ADR ha consumido los siguientes recursos y tiempos
SQL Server Execution Times:
CPU time = 6030 ms, elapsed time = 7415 ms.
Como podemos observar no se ve un incremento en los tiempos de inserción por tener el ADR activo.
Paso 6: Hacemos el Rollback con ADR activo
ROLLBACK TRAN
Usando ADR activo el tiempo y recursos del rollback han sido los siguiente:
SQL Server Execution Times:
CPU time = 10 ms, elapsed time = 3 ms.
Aquí podemos observar que antes nuestro rollback había demorado unos 4455 ms con un consumo de cpu de 910 vs los 3ms de tiempo y 10ms de CPU con ADR activo
Conclusiones
ADR parece ser una muy buena funcionalidad que trae SQL Server 2019, sobre todo para aquellos procesos largos donde se necesitan hacer rollbacks.
Mas allá de esto lo que hay que aclarar es que ADR por el momento no viene activo por defecto, con lo cual uno como DBA debe indicarle a SQL server sobre cual base se aplica.
0 Comments