jueves, agosto 14, 2008

Novedades en SQL 2008: Parte 2

En la parte 1, ya se comentaron algunas de las nuevas características de SQL 2008, en este post comentare algunas novedades relacionadas con el manejo y programación de SQL 2008.

Antes que nada, me llama la atención que algunas de estas novedades, existan ya desde hace algunos años en Oracle, lo que me deja la impresión de que MS-SQL aun esta tratando de alcanzar a Oracle con respecto a funcionalidad.

Adicción en vivo de CPU
Imaginemos el escenario de cierre de mes en una empresa de tamaño medio a grande, los servidores de base de datos están al 100% y todavía faltan algunas hora para que el cierre termine; mientras tanto tenemos por ahí un par de CPU que no se están utilizando en producción porque ya es media noche y producción no trabaja de noche, que desperdicio.

Bueno, pues con SQL 2008 y hardware que soporte la adición de CPUs en vivo, vamos a poder trasladar temporalmente esos CPUs ociosos a nuestro servidor de finanzas para tratar de acelerar el proceso de cierre mensual. De igual forma si nuestro servidor es una maquina virtual también vamos a poder adicionarle mas CPUs ociosos.

Solo basta agregar los nuevos CPUs y ejecutar RECONFIGURE para notificarle al SQL que puede hacer uso de esos CPUs y listo, no es necesario interrumpir el proceso actual, el SQL va a distribuir carga sobre los nuevos CPUs.

Gobernador de recursos
A quien no le pasado que tiene un programa de terceros que hace uso de nuestra base de datos, y el programa es terriblemente ineficiente, y cada vez que se ejecuta "ahoga" al CPU o la memoria, bloqueando otros procesos en el servidor de SQL?, pero el proveedor no ha podido solucionar el problema y el programa es necesario que se ejecute...

Bueno con SQL 2008 vamos a poder limitar esos programas voraces para que usen solo un limitado porcentaje del CPU o de la memoria. A través de grupos vamos a poder catalogar esos procesos "groseros" y restringirlos en el uso de recursos de manera que otros procesos que si se comportan bien, también puedan hacer uso de los preciados recursos.

Filestream
Inicialmente las base de datos relacionales fueron concebidas para almacenar información estructurada en forma de tablas y campos, pero en algunas ocasiones el únicamente guardar esta información no es suficiente ya que puede estar ligada a datos no estructurados como: imágenes, documentos, planos, vídeos, música, etc.

SQL permite guardar este tipo de información no estructurada en forma de BLOB (Binary Large Objects, por sus siglas en ingles), el problema es que tener este tipo de campos en una tabla, provoca una penalización de rendimiento, sobre todo cuando el tamaño de los datos no estructurados es mayor a 1MB.

Por tal motivo SQL 2008 incluye esta característica Filestream, la cual nos permite mover los campos BLOB fuera de la tabla y guardar la información no estructura en el sistema de archivos, manteniendo relación con los datos estructurados.

Esta separación trae como consecuencia mejor rendimiento de lectura en las tablas que tienen un campo Filestream, ademas de que el limite para la información no estructurada es el espacio disponible en el sistema de archivos, mientras que los campos BLOB tienen un limite de 2GB.

SQL Management Studio
El SQL Management Studio también incluye mejoras para ayudarnos al desarrollo de aplicaciones, la primera de ellas, es la inclusión de Intellisense, la que va auto-completando nombre de los objetos en la base de datos conforme tecleamos las primeras letras del nombre. Esta funcionalidad es de mucha ayuda cuando el esquema de la base de datos nos es relativamente nuevo.

La otra mejora, es la inclusión de un depurador para T-SQL, que nos permite ejecutar linea por linea de un procedimiento almacenado o una función, funcionalidad que anteriormente solo estaba disponible en Visual Studio.

Programación
Por el lado de la programación también hay varias mejoras, pero hay dos que en lo personal me llaman la atención.

A quien no le ha pasado que tiene en una tabla un campo datetime y la lógica para un reporte necesitamos hacer un DISTINCT sobre este campo para obtener las fechas donde hubo transacciones en este mes, pero... este campo también tiene la hora en que se capturo la transacción!!, por lo tanto esta solución simple no funciona, hay que buscar alguna forma de "truncar" la fecha, oh pero esperen, no hay una forma sencilla de hacer esto.

Aquí es donde los nuevos tipos de datos entran al rescate: DATE y TIME, si, como posiblemente adivinaron DATE solo almacena la parte de la fecha y TIME solo almacena la parte de la hora.

Por lo tanto para solucionar el problema planteado arriba, basta con realizar un CAST de nuestra campo DATETIME a DATE y vóila, ya podemos realizar el DISTINCT y obtener el resultado que buscamos.

Ahora veamos el problema de que tenemos una tabla con ciertos registros, pero necesitamos actualizarlos a partir de otra tabla, en la tabla fuente tenemos registros que son nuevos, que necesitan ser borrados y que necesitan ser actualizados en nuestra tabla destino.

Lo normal seria escribir la lógica por separado para cada una de las posibles operaciones y de esa forma mantener nuestra tabla destino actualizada, bueno con SQL 2008 se incluye la instrucción MERGE, la cual nos permite sincronizar las dos tablas (fuente y destino) en una sola instrucción.

Merge existía en el beta 1 de SQL 2005, pero misteriosamente desapareció en el beta 2, ahora finalmente llego con SQL 2008.

Por el momento es todo en esta primera y segunda parte sobre las novedades en el SQL 2008. Para mayor información favor visitar la documentación del SQL 2008

No hay comentarios.: