Crear objetos temporales o no, esa es la cuestión

Crear objetos temporales o no, esa es la cuestión

Es relativamente habitual encontrarnos con cargas SQL que realizan un uso intensivo de objetos temporales. Esto normalmente no supone necesariamente un problema de rendimiento per se, pero debemos tener en cuenta que esta creación y destrucción de objetos no es gratuita. En este post vamos a analizar el rendimiento de distintas configuraciones orientadas a dicho escenario de uso de datos temporales. (más…)

Una historia de fragmentación, particionado e índices columnares

Una historia de fragmentación, particionado e índices columnares

Resulta bastante habitual encontrarnos en muchos clientes situaciones de mal uso de funcionalidades de SQL Server, especialmente cuando existe cierto “hype” alrededor de ellas. Sin embargo, algo que todo técnico/arquitecto debería evaluar siempre son los pros y contras de las decisiones que se toman así como realizar mediciones para asegurarse que no tenemos algún efecto indeseado imprevisto. Todos sabemos que, en las presentaciones de productos tecnológicos, cuando se exponen las nuevas características, etc. se “vende la moto” sin entrar en los detalles y casi nada en esta vida es gratis o está exento de contras. (más…)

Logs y auditoría en la nube con stretch tables en SQL Server 2016

Logs y auditoría en la nube con stretch tables en SQL Server 2016

Una de las nuevas funcionalidades que trae SQL Server 2016 es Stretch Databases. Esta funcionalidad lo que busca es poder tener bases de datos híbridas, donde parte de la información se encuentre on-premise y otra parte en la nube. Esta no es la única opción que Microsoft ofrece para tener este tipo de bases de datos híbridas, ya que desde SQL Server 2012 podemos tener ficheros y filegroups directamente en blobs en Azure. También tenemos la posibilidad de tener ficheros en rutas de red (UNC) que se encuentren en la nube (Azure File Storage). En definitiva, lo que normalmente buscamos con estas aproximaciones es poder utilizar el almacenamiento en la nube (económico e ilimitado) desde nuestras instancias on-premise.

(más…)

Temporal tables en SQL Server 2016

Temporal tables en SQL Server 2016

La llegada de SQL Server 2016 trae numerosas nuevas funcionalidades para ayudarnos con las necesidades propias de aplicaciones empresariales. Una necesidad bastante habitual consiste en disponer de un histórico de ciertas tablas para, en el futuro, poder comprobar su contenido en distintos momentos del tiempo.

Con este requerimiento de tipo “multidimensional” es fácil pensar en que si ya disponemos de un DW (Data Warehouse) éste sería el lugar donde acudir cuando necesitamos dicha información. Esto puede presentar varios problemas, entre ellos que necesitamos primero que nuestra organización utilice un DW que contemple esta información. Otro problema es que para la carga del DW habitualmente se realizan procesos ETL que transforman los datos por lo que puede que no podamos restituir la información a su estado original.

(más…)

Rendimiento con índices columnares

Rendimiento con índices columnares

Los índices columnares son un nuevo tipo de índices disponibles en SQL Server 2012 que incorporan el almacenamiento columnar al motor relacional.

Dejando de lado los múltiples inconvenientes y limitaciones de estos índices, voy a centrarme en analizar el impacto de rendimiento teniendo en cuenta los puntos clave que se destacan de este tipo de índices: (más…)

Arquitecturas de replicación

Arquitecturas de replicación

Cuando pensamos en replicación de datos es habitual que tengamos una fuerte tendencia a pensar en los modelos tradicionales de replicación. Por ejemplo aquellos que se ofrecen como ejemplos de uso “típicos” de cada uno de los “sabores” de la replicación. Si pensamos en una replicación de mezcla normalmente lo que nos viene a la mente es un escenario donde existen un conjunto de dispositivos móviles, portátiles, PDAs, teléfonos inteligentes, etc. que sincronizan sus bases de datos locales contra un servidor central. Estos últimos años vemos como existe una tendencia muy marcada a la centralización de los datos en entornos Cloud. (más…)
¿Por qué debemos evitar funciones escalares T-SQL?

¿Por qué debemos evitar funciones escalares T-SQL?

Hoy me he decidido a escribir sobre por qué las funciones escalares T-SQL no son buena opción. Esto es otra vez mas, algo que veo como un patrón recurrente en todos los clientes que visito y siempre acabo recomendando que sean eliminados, aunque lamentáblemente muchas veces solo se hace en los escenarios críticos…es decir, la/las consultas o patrones T-SQL maléficos que les detecto que están destrozando a su pobrecito SQL Server 🙂

(más…)

Documento sobre implantación de SSDs

El grupo de investigación de Microsoft de Cambridge acaba de publicar un documento acerca de la conveniencia o no de tener el sistema de almacenamiento de SQL Server en discos SSD. Estos discos son más rápidos en lecturas aleatorias (principalmente) y gastan menos que los tradicionales (al no tener partes mecánicas), son por el contrario mucho más caros, pero en principio deberían ser una buena alternativa para aumentar el rendimiento de nuestro servidor, ya que el subsistema de disco suele ser el recurso más lento del servidor. Sin embargo, en primer lugar debemos asegurarnos que el cuello de botella (en caso de tenerlo) está ahí y luego comprobar que efectivamente la única alternativa es mejorar sí o sí la velocidad de nuestros discos. (más…)
¿Triggers asíncronos?

¿Triggers asíncronos?

En más ocasiones de las que desearíamos nos encontramos con modelos de bases de datos “plagados” de triggers. En realidad, mi postura contra los triggers no es, en general, excesivamente radical en su contra aunque no hay duda que no son recomendables como “norma a seguir” para implementar lógica de negocio. Uno de los problemas de los triggers es que “ocultan” mucho detrás de un inocente INSERT/UPDATE/DELETE, operaciones que se suelen presuponer bastante “ligeras” y pueden convertirse en verdaderos monstruos para el rendimiento si no vigilamos con cuidado el impacto de los triggers. (más…)