Latencias de red < 1ms, ¿es suficiente para un buen rendimiento de SQL Server?

Latencias de red < 1ms, ¿es suficiente para un buen rendimiento de SQL Server?

Poco a poco, a medida que el almacenamiento se vuelve más rápido, va popularizándose el almacenamiento SSD local, etc. los tiempos de acceso a disco van bajando sustancialmente. El máximo exponente en este sentido lo encontramos en sistemas con SSDs Optane que se caracterizan por tener unas latencias de lectura/escritura mucho más bajas que los SSD tradicionales y además ir directamente conectados al bus PCIe: (más…)

Estadísticas supersíncronas

Estadísticas supersíncronas

En nuestro día a día cuando hablamos de estadísticas en SQL Server casi siempre nos centramos en la necesidad de su mantenimiento periódico, a la recomendación de mantener activas las actualizaciones automáticas de estadísticas y, salvo en ciertos casos, las ventajas de la actualización asíncrona de estadísticas. (más…)

Combinando NGrams y FullText Search

Combinando NGrams y FullText Search

Con bastante frecuencia nos encontramos que nuestros clientes sufren problemas de rendimiento debido a filtros sobre campos de texto. Es bastante habitual que se quiera permitir filtrados “libres” sobre textos, descripciones, documentos, etc. pero no se tenga en cuenta que, en función del patrón de búsqueda, esto puede ser bastante pesado para SQL Server. (más…)

Curiosidades con Heaps y entornos con alto consumo de CPU

Curiosidades con Heaps y entornos con alto consumo de CPU

Es bastante habitual encontrarnos con el siguiente diálogo al aterrizar en un cliente:

  • SolidQ: ¿Me puedes comentar o mostrar los gráficos del consumo de CPU del servidor X?
  • Cliente: De CPU vamos bien, no es problema.
  • SolidQ: Si no te importa, ¿puedes mostrarme los datos que tienes al respecto?
  • Cliente: Claro. Mira, aquí puedes ver que tenemos medias (en periodos de 5 minutos) del 60% de CPU y en los momentos de más carga no pasamos del 85% de media. Está correcto, ¿verdad?

El problema de esta aproximación a la hora de interpretar a la utilización de recursos es que, intuitivamente, no solemos ser conscientes de qué implicaciones tienen estos grados de utilización tan altos. No debemos confundir la interpretación respecto a la que tendríamos del % de uso de memoria o del % de uso de disco, que únicamente indican cuanta cantidad de memoria/espacio estamos utilizando, pero no el grado de utilización de dicho recurso.

(más…)

Técnicas de apoyo a la indexación tradicional. SQL Server

Técnicas de apoyo a la indexación tradicional. SQL Server

Cuando los problemas de rendimiento empiezan a surgir uno de los primeros pensamientos que solemos tener está relacionado con la indexación. En SQL Server disponemos de diversos tipos de índices, pero existen circunstancias donde no son especialmente eficientes para el tipo de búsqueda requerido.

En este tipo de situaciones el ingenio entra en juego y podemos plantearnos alternativas que se ajusten mejor a nuestras necesidades. Por comentar algunas, podemos implementar mapas de bits, digrams/trigrams, checksums/hashes, materializaciones de funciones, etc. (más…)

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…)

RESOURCE_SEMAPHORE y SQL Server 2014 SP2 / SQL Server 2016

RESOURCE_SEMAPHORE y SQL Server 2014 SP2 / SQL Server 2016

Al realizar optimizaciones de servidores uno de los análisis básicos que se realizan es el análisis de esperas (waitstats). Una de las esperas que nos puede traer más de cabeza para encontrar su origen es la espera RESOURCE_SEMAPHORE. En este post vamos a ver algunas situaciones que pueden causar este problema y también cómo con SQL Server 2014 SP2 y SQL Server 2016 podemos mucho más fácilmente identificar las operaciones que causan más contención.

(más…)