Novedades de SQL Server 2019-2020 – SQL Server
Cada vez tenemos más cerca el lanzamiento de la nueva versión SQL Server, aunque todavía no tenemos anunciada una fecha oficial, se espera que se produzca el lanzamiento final durante el segundo semestre del año. No obstante, y aprovechando mi paso por el Solidq Summit 2019 donde los mentores de Solidq nos avanzaron algunas de las características que van a llegar. En este artículo os resumo las nuevas características y mejoras de Versión preliminar de Microsoft SQL Server 2019 CTP 3.1.
SQL Server ¿cuáles son las novedades?
¿Cuáles son esas interesantes novedades? y, ¿qué conocemos hasta el momento de la parte del motor relacional?
Desde el punto de vista de rendimiento, dentro del bloque que han denominado “Inteligent Query Processing”, tenemos una serie de características nuevas que vienen a optimizar algunos aspectos de la ejecución de consultas:
• Batch Mode en RowStore, esta característica afecta al modo en que se ejecutan los operadores que componen el plan de ejecución para una consulta. Hasta ahora siempre en modo Row procesando y devolviendo los resultados fila a fila al operador anterior que le llamó, sólo disponíamos del modo Batch en tablas con almacenamiento columnstore más propias del datawarehouse. En SQL Server 2019 se introduce el modo de procesamiento Batch también para consultas sobre tablas normales con almacenamiento por filas. Cuando un operador del plan de ejecución se ejecute en modo Batch, procesará y devolverá los resultados en bloques de múltiples registros en lugar de uno a uno, lo que mejorará el rendimiento de esa parte de la consulta. Ésto no quiere decir que todas las consultas ni operadores se vayan a ejecutar ahora en modo Batch, sino que será el optimizador el que evaluará en cada caso qué resulta más óptimo.
• Compilación diferida en variables de tipo tabla. Un problema que podía hacer que al utilizar variables tipo tabla en nuestros procedimientos obtuviéramos un rendimiento deficiente, era el hecho de que el optimizador siempre al generar los planes de ejecución de consultas sobre variables de tipo tabla, como no tiene estadísticas, siempre estimara una cardinalidad fija = 1, pudiendo resultar en operadores no eficientes en el plan. A partir de ahora, la compilación de estas consultas se diferirá hasta el momento de su primera ejecución, lo que hará que se calcule el plan en base a la cantidad actual de registros reales resultando más eficiente y mejor rendimiento.
• Inlining scalar UDF. Otro punto que va a optimizar la nueva versión, es el uso de funciones escalares en consultas. El uso de este tipo de funciones si bien podía resultar práctico porque permitía encapsular y reutilizar el código del cálculo de un cierto dato dentro de la función, en la práctica tiene un efecto muy negativo en el rendimiento de la consulta porque supone ejecutar de forma iterativa la función por cada registro que compone la consulta y no admite paralelismo. El nuevo motor evalúa las funciones y si cumplen una serie de requisitos para poder ser tratadas en línea, transforma automáticamente las funciones en expresiones relacionales y las inserta en la consulta optimizando su rendimiento.
Desde el punto de vista de Administración:
• Como novedad dentro de Always On en SQL Server 2019 se va a añadir la posibilidad de que podamos incluir dentro de un grupo de alta disponibilidad, además de nuestras Bases de Datos de usuario, las Bases de Datos del sistema Master y Msdb lo cual viene a solucionar o facilitar la problemática existente de que al tener que realizar un failover a una réplica secundaria, actualmente perdíamos o dejábamos de tener accesibles todos aquellos elementos de la instancia que están fuera de nuestras Bases de Datos, salvo que tuviéramos implementado externamente algún sistema de replicarlos también a las réplicas secundarias como son los logins y sus contraseñas, trabajos de sql, alertas, credenciales, servidores vinculados, paquetes de Integration, etc. Ahora con la posibilidad de tener Master y Msdb también formando parte del grupo de alta disponibilidad, automáticamente tendríamos todos esos elementos en las réplicas secundarias.
• Creación de índices reanudables. Esta nueva característica viene a dar solución a la problemática de aquellos escenarios en los que para crear un índice en una tabla con mucho volumen de datos, no disponemos del tiempo suficiente en la ventana de mantenimiento para poder realizar el proceso sin bloquear a los usuarios que la utilizan. Ahora dispondremos de las cláusulas RESUMABLE = ON, MAX_DURATION = x con las que ajustar la instrucción CREATE INDEX de forma que la podamos lanzar durante nuestra ventana de mantenimiento y pausarla manual o automáticamente cuando queramos y continuar posteriormente con un ALTER INDEX.
• Accelerated Database Recovery. Esta nueva funcionalidad afecta al modo en que se procesa un rollback cuando hemos lanzado una transacción y ésta no se completa ya sea porque se produzca un error o bien porque por bloqueos, tiempo o cualquier otro motivo nos vemos obligados a cancelarla. Todos nos hemos encontrado en una de estas situaciones y hemos sufrido esos casos en que el rollback de una transacción tarda más que el propio proceso en sí y no sabemos estimar cuando va a finalizar mientras tenemos nuestra Base de Datos bloqueada, pero ¿y si hubiera una forma en que los rollbacks sean casi inmediatos?. Eso es lo que nos propone esta nueva característica. Mediante el uso de unas nuevas estructuras intermedias y el versionado de filas hace posible que en caso de que la transacción se aborte, el recovery sea prácticamente inmediato. De todas formas esta opción que viene desactivada por defecto y se configura a nivel de Base de Datos, antes de aplicarla será necesario estudiar el rendimiento en nuestro entorno de producción ya que puede haber casos en los que activarla para prevenir un posible rollback, penalice el rendimiento de otras transacciones que se finalicen correctamente debido al sobre coste de mantener las estructuras intermedias.
Para finalizar, comentar también como novedad en Azure, la aparición de una nueva variante PaaS para SQL Server llamada “Azure SQL Database Managed Instance”. Esta nueva modalidad se sitúa entre las dos posibilidades que teníamos hasta el momento a la hora de llevar nuestro SQL a la nube como eran desplegar una Base de Datos en Azure Databases o contratar una máquina virtual con SQL Server. Esta modalidad pretende reunir los beneficios de las dos anteriores, por una parte es casi equivalente a una instancia completa de SQL Server local, donde tenemos acceso al agente de SQL y toda la configuración propia a nivel de instancia y de recursos comunes a todas nuestras Base de Datos, cosa que no disponemos en Azure Databases donde subimos Bases de Datos individuales y por otro lado se trata de una instancia administrada que siempre va a estar actualizada con la última versión y actualizaciones de SQL Server sin que nosotros tengamos que preocuparnos de su actualización y es una instancia que viene ya con alta disponibilidad sobre Always on.
Por:
Analista programador de aplicaciones en Clavei
Deja un comentario.