Cache Redis vs SQL Server In-Memory OLTP

Cache Redis vs SQL Server In-Memory OLTP

La llegada de SQL Server 2016 SP1 ha “democratizado” el acceso a la tecnología In-Memory OLTP pasando a estar disponible en la versión Standard y Express. Al facilitarse el acceso normalmente aumenta la cantidad de preguntas respecto a las posibilidades que ofrece una tecnología. Un posible caso de uso para In-Memory OLTP es utilizarla como caché de datos de forma que datos que son pesados de obtener/calcular puedan estar disponibles de forma más rápida. Además existen múltiples casos de éxito asociados a esta tecnología en empresas de renombre como bwin.

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

SQL Server 2016: sys.dm_exec_session_wait_stats y sys.dm_exec_query_optimizer_memory_gateways

SQL Server 2016: sys.dm_exec_session_wait_stats y sys.dm_exec_query_optimizer_memory_gateways

En este post me gustaría comentar un par de pequeñas gemas que aparecen en SQL Server 2016 y que nos pueden ayudar mucho a los que nos dedicamos al troubleshooting y la optimización. La primera de ellas nos proporciona información de las esperas desglosada a nivel de sesión. Esta funcionalidad en versiones anteriores la podíamos simular mediante el uso de eventos extendidos, aunque resultaba bastante arduo. Para quien pueda estar interesado o no disponga de SQL Server 2016 en el blog de Paul Randal podéis ver un ejemplo de cómo podemos crear dicha sesión: http://www.sqlskills.com/blogs/paul/capturing-wait-stats-for-a-single-operation/

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

Índices columnares vs PowerPivot vs SSAS Tabular

Índices columnares vs PowerPivot vs SSAS Tabular

En las últimas versiones de SQL Server y Office hemos visto cómo el motor vertipaq/xvelocity se ha incluido para distintas funcionalidades. Más concretamente hacen uso de este motor los índices columnares en el motor relacional, el modelo tabular de SSAS y PowerPivot dentro de Excel. Además, en algunos casos se combina con tecnología inmemory, como en el modelo tabular de SSAS. En este post vamos a verificar qué rendimiento podemos obtener, dado un mismo conjunto de datos, en un par de operaciones habituales. (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…)

Rendimiento de la memoria en entornos virtuales

Rendimiento de la memoria en entornos virtuales

En muchos escenarios el rendimiento de la memoria RAM es un factor determinante para el rendimiento de SQL Server. Cuando virtualizamos una máquina virtual vamos a pasar a compartir el acceso a la memoria con N máquinas virtuales y el propio host. Desgraciadamente no existen contadores de rendimiento en Windows por defecto que de forma sencilla nos puedan indicar que estamos sufriendo de problemas de congestión en el acceso a la memoria.

(más…)

Query_hash + eventos extendidos = captura de waitstats granular

Query_hash + eventos extendidos = captura de waitstats granular

Cuando hablamos de waitstats lo primero que viene a la mente la mayoría de los DBA, en función de cuantos años lleven usándolos, es el comando DBCC SQLPERF(waitstats) o la DMV sys.dm_os_wait_stats. En ocasiones la captura de esta información de forma global tiene mucho sentido, para obtener por ejemplo una “foto” de las esperas que afectan a nuestra instancia de forma global. Sin embargo, en otros casos lo que nos interesa es conocer las esperas que afectan a una parte muy concreta de nuestra carga y es ahí donde los eventos extendidos junto a un filtrado por firma de consulta (query_hash) nos ofrece el mejor resultado.

(más…)