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
[/et_pb_text][et_pb_divider _builder_version=”3.26.1″ _i=”1″ _address=”0.0.0.1″][/et_pb_divider][et_pb_text _builder_version=”3.27.4″ _i=”2″ _address=”0.0.0.2″]
Haciendo pruebas
Ahora probaremos la funcionalidad de ADR haciendo un Rollback en una transaccion
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row _builder_version=”3.26.1″ _i=”1″ _address=”0.1″][et_pb_column type=”4_4″ _builder_version=”3.26.1″ _i=”0″ _address=”0.1.0″][et_pb_dmb_code_snippet title=”Paso 1: Creando base de datos” code=”Q1JFQVRFIERBVEFCQVNFIFRSSUdHRVJEQjsKR08KVVNFIFRSSUdHRVJEQgpHTwo=” language=”sql” _builder_version=”3.26.1″ _i=”0″ _address=”0.1.0.0″]Q1JFQVRFIERBVEFCQVNFIFRSSUdHRVJEQjsKR08KVVNFIFRSSUdHRVJEQgpHTwo=[/et_pb_dmb_code_snippet][et_pb_dmb_code_snippet title=”Paso 2: Creando una tabla y llenando registros en una transacción” code=”U0VUIFNUQVRJU1RJQ1MgVElNRSBPTgoKQkVHSU4gVFJBTlNBQ1RJT04KRFJPUCBUQUJMRSBJRiBFWElTVFMgdDE7CgpTRUxFQ1QgVE9QIDUwMDAwMDAgdDEuKiAKSU5UTyB0MSAKRlJPTSBzeXMuYWxsX29iamVjdHMgQVMgdDEKQ1JPU1MgSk9JTiBzeXMuYWxsX29iamVjdHMgQVMgdDIKQ1JPU1MgSk9JTiBzeXMuYWxsX29iamVjdHMgQVMgdDMK” _builder_version=”3.26.1″ _i=”1″ _address=”0.1.0.1″]U0VUIFNUQVRJU1RJQ1MgVElNRSBPTgoKQkVHSU4gVFJBTlNBQ1RJT04KRFJPUCBUQUJMRSBJRiBFWElTVFMgdDE7CgpTRUxFQ1QgVE9QIDUwMDAwMDAgdDEuKiAKSU5UTyB0MSAKRlJPTSBzeXMuYWxsX29iamVjdHMgQVMgdDEKQ1JPU1MgSk9JTiBzeXMuYWxsX29iamVjdHMgQVMgdDIKQ1JPU1MgSk9JTiBzeXMuYWxsX29iamVjdHMgQVMgdDMK[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”3.27.4″ _i=”2″ _address=”0.1.0.2″]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.
[/et_pb_text][et_pb_dmb_code_snippet title=”Paso 6: Hacemos el Rollback con ADR activo” code=”Uk9MTEJBQ0sgVFJBTg==” _builder_version=”3.26.1″ _i=”8″ _address=”0.1.0.8″]Uk9MTEJBQ0sgVFJBTg==[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”3.27.4″ _i=”9″ _address=”0.1.0.9″]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.
[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section]