1

DBCC CLONEDATABASE

¡¡Hola DBAs!! Esta semana, intentando solucionar problemas de rendimiento, nos topamos con una característica muy fácil e interesante que nos proporciona SQL Server desde su versión 2014 SP2: DBCC CLONEDATABASE.

Este comando nos clona la base de datos que le indiquemos cual oveja Dolly copiándonos el esquema y las estadísticas de la misma (no los datos de sus tablas). Es muy útil para solucionar, investigar y diagnosticar problemas de rendimiento ya que nos proporciona la información necesaria del optimizador de consultas. También puede ser útil en el aspecto de poder realizar pruebas sin tener que dar acceso a bases de datos de producción, incluso para que puedan trabajar sobre ella usuarios sin tener acceso a los datos publicados, y para poder hacer pruebas de ajustes de consulta en una base de datos de gran tamaño sin trabajar directamente en ella.

Su principal característica es que nos permite no tener que utilizar una base de datos de producción para realizar cualquier tipo de diagnóstico de rendimiento:

Su sintaxis es sencilla, como cualquier DBCC:


DBCC CLONEDATABASE (BD_A_CLONAR, BD_CLONADA);


También, su sintaxis nos permite jugar para crear el clon sin incluir las estadísticas y el almacenamiento de consultas (dependiendo del a versión de SQL que utilicemos):


DBCC CLONEDATABASE (BD_A_CLONAR, BD_CLONADA) WITH NO_STATISTICS, NO_QUERYSTORE;


Su ejecución, si todo es correcto nos devuelve:


Como nos indica SQL Server tras la ejecución del comando, la base de datos creada es de sólo lectura y no debe usarse como base de datos de producción. 

Podemos comprobar que ya se ha realizado la clonación en el Explorador de Objetos:



¿Realmente funciona?

Como nos pareció una característica muy interesante, nos pusimos a realizar pruebas en nuestro laboratorio. Para verlo en acción realizamos una consulta en ambas bases de datos para comparar sus planes de ejecución:


AdventureWorks2017
AdventureWorks2017_Clone


Como podemos observar los planes estimados obtenidos son prácticamente idénticos.

Debemos tener en cuenta, aparte de que no contiene los datos de las tablas de la base de datos en producción, no ejecutar la reconstrucción de índices o actualización de estadísticas ya que eliminaría toda la información de las mismas que hemos clonado de la base de datos original.

El truco

Ya hemos visto su uso para realizar pruebas de rendimiento y SQL Server nos indica que nuestra base de datos clonada es sólo de lectura. Pero ¿y si pudiéramos modificar sus características para otros usos?

Efectivamente, Microsoft nos deja esa puerta abierta para poder modificar características de la base de datos como el modo lectura, su modo de recuperación o incluso su compatibilidad:



Aunque debemos considerar la advertencia de Microsoft de que nuestro clon de la base de datos no se debe utilizar en producción ya que DBCC CLONEDATABASE puede que no realice una copia completa por incompatibilidad con ciertos objetos, podemos usar nuestra base de datos clonada, y cambiadas sus características para diferentes usos en otros entornos: como base de datos de pruebas al poder introducir datos o incluso ¡¡realizar pruebas de compatibilidad con otras versiones de SQL SERVER!!

…Y hasta aquí. Esperamos que te haya sido interesante y que en un futuro te sea útil. Te animamos a cacharrear en tu entorno y consultarnos cualquier duda.


Para profundizar en el comando te invitamos a que consultes la documentación oficial: https://docs.microsoft.com/es-es/sql/t-sql/database-console-commands/dbcc-clonedatabase-transact-sql?view=sql-server-2017

¡Hasta pronto!

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *