DEA – Solucionando bug de SQLPackage en DEA con SQL Server 2022
Bienvenidos/as a un nuevo artículo en el blog de Aleson ITC. En el post de hoy hablaremos sobre DEA(Database Experimentation Assistant), explicaremos para qué sirve y veremos un posible error que nos puede ocurrir cuando estamos realizando una comparación entre 2 trazas de SQL Server.
Decidimos probar las distintas herramientas para poder comparar cargas de trabajo en SQL Server. Esto es bastante habitual, tanto en entornos de pre-producción, cómo paso previo en migraciones de base de datos.
¿Qué es DEA?
DEA (Database Experimentation Assistant), es una aplicación de Microsoft que nos permite comparar mediante trazas, cargas de trabajo de SQL Server. Nos va a permitir realizar 3 operaciones:
Capturar una traza determinada
Vamos a poder capturar una determinada traza en un servidor, y esta la podremos guardar en una ruta concreta, junto con las métricas propias de la ejecución.
Ejecutar una traza
Podemos ejecutar una traza que hayamos capturado previamente en un entorno, y a su vez, generar una traza resultante, con las métricas de esta ejecución.
Comparativa de trazas
Podemos comparar dos trazas, mediante métricas, y podremos revisar si encontramos algunos de siguientes problemas:
- Problemas de compatibilidad de consultas.
- Querys o planes de ejecución degradados.
- Sobrecarga en alguna de las trazas analizadas.
Tras recopilar la traza en el servidor de origen y ejecutar el replay en el servidor de destino sin problema, fuimos a procesar las trazas para obtener la comparativa de las mismas.
Detección del error a la hora de procesar
Al tratar de obtener los resultados de nuestro análisis, nos surgió el siguiente problema. Nos encontramos con lo que parece un fallo en la herramienta, que esperamos que pronto corrijan. Pero mientras tanto, os lo comparto por si os ocurre a más personas, qué os sirva de ayuda para analizar vuestras cargas de trabajo.
El error en cuestión:
«An error occurred while creating Analysis Database. DacPac publishing failed.»
Una vez revisado el error detallado y los logs del aplicativo, parecía que el problema tenía su origen a nivel de seguridad con la conexión al ejecutar el paquete DacPac.
Unable to connect to target server 'LAPTOP-XXXXXX'. Please verify the connection information such as the server name, login credentials, and firewall rules for the target server. A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate is not valid for the requested usage.). The certificate is not valid for the requested usage.
A continuación, una vez revisada la documentación, instalamos una versión más antigua del SQL Server 2022, ya que este tiene por defecto que la conexión tiene que ser cifrada. Instalamos un SQL Server anterior, 2016 por ejemplo. Volvemos a ejecutar y obtenemos el mismo resultado.
Tras no obtener el resultado deseado en el paso anterior, volvimos al punto de partida. Revisamos de nuevo el log de errores, y vimos que lo que fallaba era a la hora de ejecutar un comando del SQLPackage.
Detectamos que en la versión 161.XXXX.X del SQLPackage (módulo que se instala con el SQL Server Data-tier Application Framework cómo requerimiento para el funcionamiento del DEA), se implementa el módulo para conexiones cifradas, obligando a que todos los recursos que utilizan este SQLPackage, tengan que declarar la seguridad en la conexión. Esto era lo que estaba provocando el problema. Ya que el comando, desde la herramienta DEA, genera el comando a «Hardcodeado», sin tener en cuenta esta posible encriptación de la conexión. Por esto pasamos a instalar la versión justo anterior a la de esta actualización, que es el SQLPackage 19.2 (De la versión 19.2, saltó a la 161.X). Que para poder instalar esta versión, se ha tenido que descargar la versión de SQL Server Data-tier Application Framework 16.0.62.96.0.
Una vez downgradeada la versión del SQLPackage, para lo cual tenemos que desinstalar la versión actualizada e instalar la versión antigua, volvemos a tratar de procesar las trazas.
Para configurar el análisis, tendremos que asignar primero el servidor que vamos a utilizar para procesar las trazas, junto con un nombre para el análisis. Después, seleccionaremos dónde tenemos las trazas si, en local o en un Blob, y luego la ruta de las trazas. Esta vez con éxito.
Tras comprobar su correcto funcionamiento, repetimos el procedimiento, con la versión antigua del SQLPackage, sobre un SQL Server 2022. Efectivamente, el problema persiste ya que aunque el SQLPackage admita la instrucción, el SQL Server no deja establecer la conexión. Esto es, de nuevo, debido a que el DEA no especifica el contexto de seguridad en la conexión, requerido en SQL Server 2022.
A fecha de publicación de esta entrada todavía persiste el problema en la versión 2.6 del DEA.
Espero que os haya sido de utilidad el post, y nos vemos en el siguiente.
¡No olvides contactar con nosotros si tienes alguna duda!
Data Engineer.