¿Cuantas veces has querido que al hacer Rollback de una transaccion el SQL Server no se demore tanto? O tambien cuando se te apago el servicio de SQL Server de forma inesperada por alguna falla del SO o equipo que la base no se demore tanto en estas en modo recovery?

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

El tiempo de procesamiento en mi equipo fue el siguiente

SQL Server Execution Times:
CPU time = 6600 ms, elapsed time = 7679 ms.

Hacer este proceso de Rollback ha llevado el siguiente tiempo:

SQL Server Execution Times:
CPU time = 910 ms, elapsed time = 4445 ms. 

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.

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.