Buscando las cosquillas al heartbeat de Windows Clustering

Buscando las cosquillas al heartbeat de Windows Clustering

A día de hoy el sistema de alta disponibilidad más utilizado para SQL Server sigue siendo aún Failover Clustering. Uno de los componentes críticos para el buen funcionamiento del clúster es el mantener unas comunicaciones entre los nodos de calidad. Concretamente con calidad nos referimos a que no tengamos cortes, descartes de paquetes o latencias excesivas para el tráfico de heartbeat.

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

“To shrink or not to shrink” esa es la cuestión

“To shrink or not to shrink” esa es la cuestión

En ocasiones nos encontramos en situaciones donde el espacio libre en un disco se ha reducido tanto que nos genera errores de asignación en nuestras bases de datos. En esos momentos, normalmente con cierta urgencia, un posible recurso es realizar una operación de shrink para liberar espacio al final de los ficheros. El problema es que, en función de la existencia o no de datos al final del fichero, esta operación puede ser muy costosa y lenta.

(más…)

Ataque DoS a SQL Server para Dummies

Ataque DoS a SQL Server para Dummies

En muchas ocasiones nos encontramos con entornos de producción donde “demasiada gente” tiene acceso. En muchos casos son accesos de “solo lectura” aunque eso no los hace inofensivos de cara a la estabilidad del sistema. Pero podemos ir más allá, vamos a ver como con un login, con rol public, sin acceso a ninguna base de datos de usuario, se puede realizar fácilmente un ataque de denegación de servicio (DoS) contra SQL Server.

(más…)

Eliminar un filegroup offline/defunct usado para In-Memory OLTP

Eliminar un filegroup offline/defunct usado para In-Memory OLTP

Un problema con el que seguramente los DBAs senior se han encontrado más de una vez es la de tener filegroups offline/defunct en sus bases de datos. Esta situación ocurre normalmente tras una situación de desastre que, debido a la falta de medidas preventivas adecuadas, no nos permite dejar la base de datos con todos sus ficheros restaurados. En este post nos vamos a centrar en un caso especial que ocurre cuando el filegroup que no podemos recuperar es precisamente un filegroup utilizado para el almacenamiento de objetos In-Memory.

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