Uncategorized
80

ACCELERATED DATABASE RECOVERY

[et_pb_section fb_built=”1″ _builder_version=”3.26.1″ fb_built=”1″ _i=”0″ _address=”0″][et_pb_row _builder_version=”3.29.3″ hover_enabled=”0″ _i=”0″ _address=”0.0″][et_pb_column type=”4_4″ _builder_version=”3.26.1″ _i=”0″ _address=”0.0.0″][et_pb_text _builder_version=”3.29.3″ hover_enabled=”0″ _i=”0″ _address=”0.0.0.0″]¿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


[/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.

[/et_pb_text][et_pb_dmb_code_snippet title=”Paso 3: Haciendo un Rollback de la transacción” code=”Uk9MTEJBQ0sgVFJBTg==” _builder_version=”3.26.1″ _i=”3″ _address=”0.1.0.3″]Uk9MTEJBQ0sgVFJBTg==[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”3.27.4″ _i=”4″ _address=”0.1.0.4″]

Hacer este proceso de Rollback ha llevado el siguiente tiempo:

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

[/et_pb_text][et_pb_dmb_code_snippet title=”Paso 4: Activar ADR para la base de datos ” code=”QUxURVIgREFUQUJBU0UgdHJpZ2dlcmRiIApTRVQgQUNDRUxFUkFURURfREFUQUJBU0VfUkVDT1ZFUlkgPSBPTjsKR08K” _builder_version=”3.29.3″ hover_enabled=”0″ _i=”5″ _address=”0.1.0.5″]QUxURVIgREFUQUJBU0UgdHJpZ2dlcmRiIApTRVQgQUNDRUxFUkFURURfREFUQUJBU0VfUkVDT1ZFUlkgPSBPTjsKR08K[/et_pb_dmb_code_snippet][et_pb_dmb_code_snippet title=”Paso 5: volvemos a hacer el insert en la transacción” code=”QkVHSU4gVFJBTlNBQ1RJT04KCkRST1AgVEFCTEUgSUYgRVhJU1RTIHQxOwoKU0VMRUNUIFRPUCA1MDAwMDAwIHQxLiogCklOVE8gdDEgCkZST00gc3lzLmFsbF9vYmplY3RzIEFTIHQxCkNST1NTIEpPSU4gc3lzLmFsbF9vYmplY3RzIEFTIHQyCkNST1NTIEpPSU4gc3lzLmFsbF9vYmplY3RzIEFTIHQzCg==” _builder_version=”3.26.1″ _i=”6″ _address=”0.1.0.6″]QkVHSU4gVFJBTlNBQ1RJT04KCkRST1AgVEFCTEUgSUYgRVhJU1RTIHQxOwoKU0VMRUNUIFRPUCA1MDAwMDAwIHQxLiogCklOVE8gdDEgCkZST00gc3lzLmFsbF9vYmplY3RzIEFTIHQxCkNST1NTIEpPSU4gc3lzLmFsbF9vYmplY3RzIEFTIHQyCkNST1NTIEpPSU4gc3lzLmFsbF9vYmplY3RzIEFTIHQzCg==[/et_pb_dmb_code_snippet][et_pb_text _builder_version=”3.27.4″ _i=”7″ _address=”0.1.0.7″]

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]