cloud

¿Sirven de algo los bloqueos de recursos en Azure?

Volvemos con nuestros video blogs esta vez con un vídeo sobre los bloqueos de recursos en Azure. Esta opción nos va  a permitir generar un bloqueo sobre un objeto de Azure para evitar que se pueda borrar. De esta manera, cuando alguien intente borrar nuestra base de datos o instancia gestionada desde el portal de Azure obtendrá un error indicando que el recurso está bloqueado.

Bloqueo de Recursos en Azure

Azure ofrece una característica llamada bloqueos que nos permite proteger nuestros recursos contra modificaciones o eliminaciones accidentales. Los bloqueos de recursos pueden ser aplicados a cualquier recurso de Azure, desde suscripciones y grupos de recursos hasta servicios individuales.

Plano de Control y Plano de Datos

Para entender cómo funcionan los bloqueos de recursos, primero debemos entender la diferencia entre el plano de control y el plano de datos en Azure.

El plano de control es responsable de las operaciones de gestión en Azure. Esto incluye acciones como la creación, modificación y eliminación de recursos. Cuando aplicamos un bloqueo de recursos, estamos interactuando con el plano de control.

Por otro lado, el plano de datos se encarga de las operaciones que se realizan en los recursos una vez que están creados. Esto incluye acciones como la lectura y escritura de datos en una base de datos o el envío de mensajes a través de un bus de servicio. Este plano de datos queda fuera del «paraguas» de protección de los bloqueos de recursos.

Aplicando Bloqueos de Recursos

Los bloqueos de recursos se pueden configurar para permitir solo lecturas o para evitar todas las modificaciones. Un bloqueo de solo lectura permitirá que los usuarios vean y consulten los recursos, pero no podrán hacer cambios. Un bloqueo de no modificación, por otro lado, evitará cualquier cambio en el recurso, incluyendo la eliminación.

Conclusión

La protección de nuestros recursos en Azure es esencial para mantener la integridad y seguridad de nuestros datos. Los bloqueos de recursos nos ofrecen una forma eficaz de prevenir borrados y modificaciones no deseadas, asegurando que nuestros recursos permanezcan seguros y protegidos. Sin embargo, esto debe ser combinado por una buena política de permisos en SQL Server o, de lo contrario una operación desde el plano de datos acabará con nuestros sistemas.

Recuerda, como administradores de bases de datos, nuestra prioridad es siempre la seguridad y la protección de nuestros recursos. Asegúrate de utilizar todas las herramientas a tu disposición para mantener tus recursos de Azure seguros. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, Videos, 0 comentarios

Detectando fragmentación de índices en SQL Server y Azure

Volvemos a la carga con un artículo sobre índices de esos que tanto nos gustan. Esta vez vamos a hablar de un tema muy importante y es detectar qué índices están más fragmentados y cómo solucionarlo. A menudo vemos que una mala gestión de los planes de mantenimiento provocan una degradación del rendimiento de las consultas y eso, gran parte de las veces es debido a un problema de fragmentación de índices o falta de mantenimiento de las estadísticas. Hoy vamos a centrarnos en el primero de estos aspectos.

¿Cómo detectar fragmentación en los índices?

Para ver la fragmentación de un índice en concreto podemos hacerlo desde el entorno gráfico de nuestro SSMS, haciendo click derecho sobre el objeto y mirando sus propiedades. Sin embargo, esto no es práctico cuando tenemos cientos de índices en nuestra base de datos y queremos saber de un vistazo cuales son los más fragmentados y cuanto. Para ello, usaremos una consulta sobre la función de sistema sys.dm_db_index_physical_stats

Otra de las cosas que debemos tener en cuenta es el tamaño de nuestra tabla, con menos de 1000 páginas, el motor de base de datos directamente ignorará los índices nonclustered y, en el caso de los clustered, tampoco vamos a notar diferencia.

Con esto en mente vamos a preparar el script. 

Revisemos el script, por un lado podemos ver que a la función para ver las estadísticas de los índices le estamos pasando el id de la base de datos actual para que se ejecute en ese contexto. Esto es para evitar que se ejecute por todas las bases de datos y podamos tener un problema de rendimiento con esta consulta. Por otro lado vemos que solo afecta a tablas y vistas de usuario que tengan un índice clustered, el tipo de índice 0 está excluido de los filtros. Las tablas HEAP (sin índice clustered) necesitan otro tipo de tratamiento. Podemos ver también el filtro para solo mostrar índices con más de 1000 páginas y el de fragmentación superior al 5%, que suele considerarse el umbral de fragmentación aceptable.

Solucionar fragmentación de índices

Ahora que sabemos cuales son los índices más fragmentados debemos actuar y solucionar el problema. Sabemos que tenemos a nuestra disposición dos alternativas: reorganizar o reconstruir. Para elegir entre una opción u otra tenemos varios factores a tener en cuenta.

Por un lado tenemos el modo de operación de estas instrucciones, reorganizar siempre es una operación online lo que significa que solo generará sobre nuestro índice un intento de bloqueo compartido. El índice se podrá seguir leyendo durante la reordenación sin causar bloqueos. En cuanto a la reconstrucción, solo es online si se lo especificamos manualmente y eso solo es posible en ediciones Enterprise de SQL Server o en las bases de datos o instancias gestionadas de Azure. Si la reconstrucción es offline se generará un bloqueo exclusivo sobre el índice.

Por otro lado, la reconstrucción es más eficiente que la reorganización para porcentajes elevados de fragmentación y eso deberemos tenerlo también muy en cuenta.

¿Debería reorganizar o reconstruir mis índices con mucha fragmentación?

Esto no es una ciencia exacta y es un tema sobre el que hay muchas opiniones discordantes. Normalmente se habla de reorganizar los índices con una fragmentación superior al 5 o 10% y menor al 15 o 30%. Como veis es una horquilla muy amplia y para atinar tenemos que pensar en las las implicaciones de estas operaciones que ya hemos visto antes. Yo os voy a contar cómo lo hago yo pero esto es totalmente personal y deberás adaptarlo a cada caso.

Escenario 1: Mantenimiento programado

En este primer escenario estamos hablando de un mantenimiento programado dentro de una ventana de mantenimiento en la que no hay interferencia con otros procesos. Este caso es el más sencillo porque no tenemos que pensar en no entorpecer a nadie. En estos casos yo pongo el umbral para empezar a actuar en un 5%. Si estamos hablando de una edición Standard de SQL Server reorganizaré los índices con una fragmentación entre un 5 y un 20% y reconstruiré los de mayor fragmentación. Para ediciones Enterprise o Azure reduciré esa horquilla para reorganizar entre un 5 y un 15% y haré reorganizaciones online a partir del 15%.

Escenario 2: Problema puntual de rendimiento

En este escenario estamos hablando de un momento de carga de trabajo elevada en el que hemos recibido o detectado una incidencia por problemas de rendimiento. Tenemos que actuar rápido para solventar la situación pero entorpeciendo lo menos posible a los procesos de negocio que ya de partida tienen un rendimiento mermado. En estos casos pongo el umbral para empezar a actuar en fragmentaciones por encima del 10% en vez del 5. A partir de ahí, si tenemos la suerte de contar con una edición Enterprise, o estamos en Azure, no hay más problema, reconstruiremos con las mismas condiciones que en el escenario anterior, a partir del 15%. Para una edición Standard, donde si vamos a generar bloqueos si reconstruimos, intentaremos reorganizar hasta el 30% de fragmentación.

Solucionar estadísticas desactualizadas

Las estadísticas son clave para SQL Server. Como ya hemos comentado en este blog muchas veces, unas estadísticas desfasadas pueden tener el mismo impacto negativo o peor que un índice fragmentado. Por este motivo, es importante tenerlas en cuenta a la hora de realizar nuestros mantenimientos o enfrentar una incidencia por degradación de rendimiento. Una reconstrucción de índices siempre actualizará las estadísticas asociadas a ese índice pero en el caso de las reorganizaciones deberemos hacerlo manualmente. Tenemos que contar también con que una actualización de estadísticas es más ligera y rápida que un mantenimiento de índices por lo que, en caso de una degradación de rendimiento de una consulta puntual, yo siempre actualizo las estadísticas de las tablas involucradas como primera medida.

Conclusión

Ante un problema de rendimiento, tenemos que verificar el estado de nuestros índices y estadísticas. Además, consultar su nivel de fragmentación será clave a la hora de decidir si vamos a reorganizarlo o reconstruirlo y, todo esto, siempre sin dejar de lado las estadísticas. Tened en cuenta que por mucho que tengamos implementada una solución de mantenimiento de índices y estadísticas nunca vamos a estar 100% seguros de que no va a haber una variación tal de datos que nos va a generar fragmentación o a dejar desfasadas nuestras estadísticas. Es importante que mantengamos una monitorización y vigilancia continua para garantizar el mejor desempeño de nuestros SQL Server.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, Índices, Rendimiento, SQL Server, 1 comentario

Configurar planes de mantenimiento en SQL Server y Azure

Hola a todos y bienvenidos a este nuevo formato de Video Blog que espero que os guste y que podamos ver por aquí más a menudo. Hoy vamos a ver un caso práctico sobre como configurar planes de mantenimiento en nuestro SQL Server o instancia administrada en Azure gracias a los script de Ola Hallengren. En todo este tiempo como DBA (más de 10 años) os aseguro que más del 90% de las incidencias por supuestos problemas de rendimiento a las que me he enfrentado eran siempre por lo mismo, una falta de mantenimiento correcto. Por esto es importante programar tareas de reconstrucción de índices y mantenimiento de estadísticas. Y ya de paso, aprovechamos y configuramos las copias de seguridad y comprobaciones de integridad que también nos ofrece esta solución gratuita. Pocas veces vas a encontrar más por menos.

Guía de capítulos

  • 00:00 Introducción
  • 00:39 Descarga
  • 01:20 Instalación
  • 05:42 Backups
  • 10:15 Integrity Check
  • 11:42 Index Optimize
  • 13:13 Limpieza
  • 13:54 Log de procesos

Configurar planes de mantenimiento

Como podemos ver en el vídeo para descargar los scripts de mantenimiento solo deberemos acudir a la web de Ola Hallengren y descargar el script que se llama «MaintenanceSolution.sql». Con el script ya abierto en nuestro SSMS podremos configurar la base de datos donde se van a crear los scripts y una serie de configuraciones importantes para los jobs.

Una vez instalada la solución de planes de mantenimiento vamos a poder configurar en los distintos jobs las tareas de copias de seguridad, supervisión de la integridad y reconstrucción y actualización de índices y estadísticas para las bases de datos de sistema y de usuario. También es importante que configuremos los trabajos que incluyen las tareas de mantenimiento para no encontrarnos con incidencias de espacio en disco en un futuro.

Esta solución, además, tiene la ventaja de dejar un log bastante completo en una tabla llamada CommandLog que estará en la misma base de datos que hayamos creado los procedimientos almacenados de mantenimiento. En esta tabla podremos encontrar todo el historia de ejecuciones de todos los comandos con su detalle, horas de inicio y de fin y, por supuesto, si ha dado un error veremos el por qué.

Publicado por Roberto Carrancio en Cloud, SQL Server, Videos, 0 comentarios

SQL o Azure ¿Qué solución es mejor para mi?

Si estás pensando desplegar un nuevo servidor, quizá por un proceso de migración, uno de los aspectos clave es elegir qué edición de SQL Server se adapta mejor a tus necesidades. Hoy en día, Microsoft ofrece una gran variedad de soluciones que, si bien están pensadas para satisfacer las necesidades de todas las empresas, puede ser un poco lioso para usuarios o administradores no iniciados en el tema del licenciamiento de SQL Server. Hoy, vamos a explorar las diferencias entre las ediciones de SQL Server 2022 (Express, Standard y Enterprise), las Bases de Datos de Azure y las Instancias Gestionadas de Azure.

Nube o local

Lo primero que tenemos que tener claro es si necesitamos desplegar un servidor en la nube o en local. En ocasiones, por regulación o por necesidades del proyecto ya podemos descartar varias de las opciones y, por tanto, lo tendremos bastante más fácil.
Un servidor local puede ser la elección correcta si tu empresa tiene requisitos de seguridad o cumplimiento muy específicos que requieren un control total sobre los datos. También puede ser beneficioso si ya tienes una infraestructura de sistemas robusta y el personal con experiencia en la gestión de servidores locales. En este caso no lo dudes y amortiza tu infraestructura local, ya habrá tiempo de replantearse la solución. 

Por otro lado, una solución en la nube es ideal si necesitas flexibilidad, escalabilidad y ahorro de coste en el despliegue. Las soluciones en la nube, como Azure, pueden ofrecer, además, alta disponibilidad y copias de seguridad y actualizaciones de seguridad automáticas, liberando de carga de trabajo a los equipos de IT. Esta solución es también recomendable en escenarios descentralizados donde, de otra manera, tendríamos que tener en nuestra infraestructura local (y gestionar) servidores expuestos en internet. Sin embargo, a largo plazo el modelo de pago por uso puede derivar en grandes costes, sobre todo si no tienes personal con la formación adecuada para dimensionar y optimizar tanto la propia infraestructura en la nube como las aplicaciones que hacen uso de ella.

Soluciones locales

Microsoft nos ofrece varios “sabores” de SQL Server 2022, en concreto tenemos a nuestra disposición las ediciones Express, Standard, Enterprise y Development. Cada una de ellas con un coste y unas características. En este artículo nos vamos a centrar solo en las tres primeras pues son las destinadas a entornos de producción, de la edición Development solo comentaré que tiene todas las características de la  edición Enterprise pero de manera gratuita a cambio de no poder usarse en entornos de producción. 

SQL Server 2022 Express

La edición Express es una versión gratuita de SQL Server, diseñada para aplicaciones de pequeña escala. Aunque es gratuita y ofrece toda la robustez del sistema de gestión de bases de datos de Microsoft, tiene muchas limitaciones en términos de tamaño de las bases de datos y capacidades de procesamiento.

Es una solución ideal para pequeñas empresas que están iniciando un proyecto que necesita una base de datos. Sin embargo, pronto se puede quedar corta debido a sus limitaciones de tamaño de máximo 10 Gb por base de datos (incluyendo datos y log de transacciones), 1 Gb de memoria RAM y solo un procesador (físico o virtual) del que además solo se aprovecharán 4 núcleos (físicos o virtuales). A estas limitaciones hay que sumarle que no dispone de agente de SQL Server por lo que no podremos utilizar esas funcionalidades. En cuanto a funcionalidades también encontraremos limitaciones como la imposibilidad de comprimir los backups o de reconstruir índices online.

SQL Server 2022 Standard

La edición Standard es una solución de gestión de datos y BI (Business Intelligence) completa que ofrece más capacidades que la edición Express. Es ideal para las medianas empresas que necesitan características avanzadas, pero no todas las capacidades de alto rendimiento de la edición Enterprise. Por ejemplo, solo dispone de una solución Always On simple para una sola base de datos y con únicamente un nodo secundario. Tampoco nos ofrece por ejemplo la posibilidad de reconstruir índices online. Esto hace que no sea una solución adecuada para entornos críticos donde necesitemos una disponibilidad 24×7. 

SQL Server 2022 Enterprise

La edición Enterprise es la más completa y potente que ofrece Microsoft hasta la fecha. Ofrece todas las capacidades de SQL Server para las empresas que necesitan el más alto nivel de escalabilidad, disponibilidad y seguridad eso sí, a un coste muy elevado (unas 5x veces la licencia Standard). Si optamos por asumir el alto coste por licencia de una edición Enterprise a cambio nos llevaremos ventajas como la posibilidad de usar todas las funciones de Always On, la reconstrucción de índices online, mayores opciones en la replicación o la posibilidad de usar Resource Governor, por ejemplo.

Soluciones en la nube

Desde hace ya más de una década (madre mía cómo pasa el tiempo) Microsoft dispone de Azure, su nube con soluciones SQL Server entre otras. Centrándonos en SQL Server tenemos a nuestra disposición también varias opciones y para todos los gustos, tanto SaaS como IaaS. SaaS hace referencia al software como servicio (Software As A Service) mientras que IaaS es la infraestructura en la nube (Infraestructure As A Service). Esto quiere decir que en las soluciones SaaS solo dispondremos de una base de datos o una instancia de SQL como un servicio en la nube mientras que en las soluciones IaaS dispondremos de un servidor completo en la nube donde instalar cualquier aplicación como hacemos en los servidores locales.

Bases de Datos de Azure SQL

Las Bases de Datos de Azure son soluciones SaaS de bases de datos completamente administradas. Como características principales podemos destacar que nos proporcionan una buena protección de los datos y gran escalabilidad sin la necesidad de administrar la infraestructura subyacente ni la instancia SQL Server. Esto es también su mayor limitación dado que no dispondremos de todas las características propias de una instancia como el Agente de SQL Server. También hay que mencionar que, aunque dispone de características de alta disponibilidad estas no son tan completas como las de las instancias gestionadas. En cuanto a costes son muy variables ya que usan el método de pago por uso y podremos definir un escalado bajo demanda para reducir el presupuesto. Os recomiendo utilizar la calculadora de costes de Azure Database si estáis pensando en implementar esta solución.

Instancias SQL Gestionadas de Azure

Las Instancias Gestionadas de Azure son una opción para cuando necesitemos la flexibilidad y el control total de una instancia de SQL Server, pero con la comodidad de un servicio gestionado. Ofrecen casi el 100% de compatibilidad con SQL Server Enterprise sin renunciar a las ventajas propias de la nube como actualizaciones automáticas. Es reseñable para esta solución el 99,99% de disponibilidad que anuncia Microsoft para cada base de datos individual alojada en una instancia gestionada pero, si eso os parece poco, aún dispone de opciones de alta disponibilidad para acercar esa cifra aún más al 100%. También dispone de su propia calculadora de precios que os recomiendo consultar antes de cualquier implementación.

Otras soluciones SQL Server en la nube

Además de las soluciones propias de Microsoft podemos encontrar las instancias gestionadas de Amazon AWS llamadas RDS. Aunque no es una solución tan completa como la de Microsoft, puede ser una opción a tener en cuenta si vuestra infraestructura cloud está en esta plataforma. 

Para finalizar con este resumen de soluciones en la nube, encontramos la posibilidad de desplegar un servidor IaaS sobre cualquier nube comercial (Azure, AWS, GCP, etc…) e instalar sobre él un SQL Server licenciado de igual manera que con las soluciones locales. De esta manera, tenemos ciertas ventajas de la nube sin renunciar a las características propias de una solución local.

Conclusión

Microsoft ofrece una variedad de soluciones de bases de datos para satisfacer las necesidades de las empresas de todos los tamaños. Desde la edición Express de SQL Server 2022 para las necesidades de pequeñas aplicaciones, hasta las Instancias Gestionadas de Azure para las empresas que buscan la máxima flexibilidad y control, hay una solución para cada situación. Además no son excluyentes y en la mayoría de los casos nos encontraremos con escenarios híbridos que combinan varias de estas soluciones tanto locales como en la nube.

La elección depende de las necesidades específicas de tu empresa y espero que, tras leer este artículo, estés más preparado para tomar la decisión. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

Protegiéndonos con Microsoft Defender para SQL Server

En el mundo digital de hoy, la seguridad de los datos es primordial. Como profesionales de la base de datos, entendemos la importancia de proteger nuestros activos más valiosos: nuestros datos. La creciente proliferación y sofisticación de las amenazas cibernéticas y la prevalencia de los ataques dirigidos a las bases de datos hacen que la necesidad de soluciones de seguridad robustas sea más importante que nunca. Hoy, vamos a explorar una herramienta que nos ayuda a hacer precisamente eso: Microsoft Defender para SQL Server.

¿Por qué necesitamos Microsoft Defender para SQL Server?

Las bases de datos son a menudo el objetivo de los ciberdelincuentes debido a la valiosa información que contienen. Con el aumento de las amenazas y la constante evolución de las tácticas de los ciberdelincuentes, es esencial contar con una solución de seguridad que pueda mantenerse al día. Ya dedicamos hace unas semanas un artículo a los ataques SQL Injection, que son los más predominantes, y que puedes leer aquí. Aquí es donde entra en juego Microsoft Defender para SQL Server que gracias a aprovechar todo el potencial de Azure nos permite protegernos de este y muchos otros escenarios.

¿Qué es Microsoft Defender para SQL Server?

Microsoft Defender para SQL Server es una solución de seguridad integral diseñada para proteger nuestras bases de datos SQL Server ya esten On Premise, en la nube de Azure o en otras nubes comerciales como ASW o GCP. Proporciona una capa adicional de protección, ayudándonos a detectar y responder a amenazas potenciales antes de que puedan causar daño.  Pero, ¿qué significa esto en términos técnicos?

Características Clave

Microsoft Defender para SQL Server viene con una serie de características que lo hacen una opción atractiva para cualquier organización que busque mejorar su postura de seguridad. Además integrar una detección de amenazas, como estamos acostumbrados en los antivirus convencionales, incluye una evaluación de vulnerabilidades que nos permitirá detectar nuestros puntos flacos en la seguridad de nuestras bases de datos.

Detección de Amenazas

Una de las características más destacadas de Microsoft Defender para SQL Server es su capacidad para detectar amenazas en tiempo real. Utiliza algoritmos avanzados para identificar comportamientos sospechosos y alertarnos de posibles problemas. Esto incluye la detección de inyecciones SQL, anomalías en el comportamiento de la base de datos y configuraciones inseguras.

Integración con Azure

Como parte de la familia de productos de Azure, Microsoft Defender para SQL Server se integra perfectamente con otros servicios de Azure, lo que permite una visión unificada de la seguridad en toda nuestra infraestructura de Azure. Esto nos permite tener una visión unificada de nuestra seguridad en toda nuestra infraestructura de Azure. Esto significa que podemos ver y gestionar las alertas de seguridad de todas nuestras bases de datos SQL Server desde un único panel.

Cobertura de Microsoft Defender para SQL Server

Microsoft Defender para SQL Server ofrece una amplia cobertura para proteger nuestras bases de datos. Esto incluye la protección contra ataques de inyección SQL, la detección de anomalías en el comportamiento de la base de datos y la identificación de configuraciones inseguras. Además, proporciona recomendaciones de seguridad personalizadas basadas en nuestras configuraciones y patrones de uso específicos.

Entre las coberturas que  Microsoft Defender para SQL Server ofrece una amplia cobertura para proteger nuestras bases de datos podemos encontrar:

  • Protección contra ataques de inyección SQL: Microsoft Defender para SQL Server utiliza técnicas de aprendizaje automático para detectar patrones de consulta SQL anómalos que podrían indicar un intento de inyección SQL.
  • Detección de anomalías en el comportamiento de la base de datos: Microsoft Defender para SQL Server puede identificar comportamientos anómalos, como un aumento repentino en el volumen de transacciones o cambios inusuales en los patrones de acceso a los datos.
  • Identificación de configuraciones inseguras: Microsoft Defender para SQL Server puede identificar configuraciones que podrían hacer que nuestras bases de datos sean más vulnerables a los ataques, como la falta de cifrado o el uso de contraseñas débiles.

Evaluación de Vulnerabilidades con Microsoft Defender para SQL Server

Otra de las características esenciales de Microsoft Defender para SQL Server es su capacidad para realizar evaluaciones de vulnerabilidades como ya hemos comentado. Lo más interesante de esta herramienta integrada es que analizando las configuraciones de nuestras bases de datos es capaz de descubrir e indicarnos cómo remediar posibles vulnerabilidades en la base de datos. Las evaluaciones de vulnerabilidades proporcionan una visión general del estado de seguridad de nuestras máquinas SQL y detalles de cualquier hallazgo de seguridad.

La evaluación de vulnerabilidades emplea una base de conocimientos de reglas que señalan vulnerabilidades de seguridad y resaltan desviaciones de las mejores prácticas, como configuraciones incorrectas, permisos excesivos y datos sensibles sin protección. Las reglas se basan en las mejores prácticas recomendadas por Microsoft y se centran en los problemas de seguridad que presentan los mayores riesgos para nuestra base de datos y nuestros datos.

Además, cuando habilitamos el plan Defender para Azure SQL en Defender for Cloud, Defender for Cloud habilita automáticamente la Protección Avanzada contra Amenazas y la evaluación de vulnerabilidades con la configuración express para todas las bases de datos Azure SQL en la suscripción seleccionada. Esto nos permite realizar evaluaciones de vulnerabilidades a demanda para ver los hallazgos actuales.

Conclusión

Microsoft Defender para SQL Server es una herramienta valiosa para cualquier administrador de bases de datos que busque mejorar la seguridad de sus bases de datos SQL Server en la nube. Proporciona una serie de características de seguridad avanzadas y se integra perfectamente con Azure Security Center, lo que facilita la gestión de la seguridad de nuestras bases de datos. Aunque no es una solución de seguridad completa en sí misma, es un componente importante de una estrategia de seguridad de bases de datos efectiva.

Espero que este artículo te haya sido útil y que te ayude a tener mayor control sobre tus servidores SQL Server. Te animo a investigar más y definir nuevas alertas que puedan resultarte interesantes. Una vez hecho, puedes dejarlo en los comentarios y, entre todos, seguro que aprendemos algo nuevo. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 2 comentarios

Dimensionamiento correcto de un servidor

En nuestro trabajo como administradores de bases de datos, una de las tareas más cruciales y desafiantes a las que nos vamos a enfrentar es calcular el dimensionamiento de un servidor SQL Server. Este proceso implica determinar la cantidad de recursos necesarios para que el servidor funcione de manera óptima, teniendo en cuenta factores como el número de usuarios, la cantidad de datos y las operaciones de la base de datos.

Consideraciones Iniciales

El dimensionamiento adecuado de un servidor SQL Server no es una tarea sencilla. Requiere un conocimiento profundo de las características y capacidades del servidor, así como de las necesidades y demandas de la base de datos y las aplicaciones que se ejecutan en él. Antes de sumergirnos en cálculos y métricas, es esencial entender la carga de trabajo que manejará nuestro nuevo servidor. Esto implica analizar el volumen de transacciones, la concurrencia de usuarios, y los patrones de acceso a los datos. Solo con un conocimiento profundo de estas variables podemos comenzar a esbozar los requisitos de nuestro servidor. 

Si el nuevo servidor se va a usar para sustituir uno ya existente lo vamos a tener mucho más fácil, podremos basarnos en el estado actual y analizar sus puntos flacos para tratar de mejorarlos. Hablamos de migraciones en este otro artículo.

El verdadero reto lo tendremos cuando nos enfrentemos a un escenario nuevo, desde 0. En este caso, será crucial la colaboración de los equipos responsables de los datos o de las aplicaciones, en especial de un buen project manager, además de otros departamentos de negocio que nos puedan indicar previamente las expectativas de carga de trabajo y necesidades de almacenamiento.  En un mundo ideal, todas estas necesidades estarían especificadas en la documentación del proyecto y no tendríamos que hacer más preguntas. Pero, como eso no es lo que nos solemos encontrar (y menos mal, porque así tengo algo de lo que escribiros), vamos a analizar en profundidad que debemos tener en cuenta.

Aspectos a evitar

A lo largo de mis años de experiencia me he enfrentado a las suficientes migraciones y nuevos despliegues como para haber elaborado una lista con los aspectos que si o si debo evitar si quiero llevar el proyecto a buen puerto. Os comparto un pequeño resumen:

  • Subestimar el crecimiento: Y no solo me refiero a los datos, eso es quizá lo de menos. Debemos tener una idea clara de las necesidades de recursos del servidor para que un futuro aumento de la carga de trabajo no nos degrade el rendimiento o, directamente, tumbe el servicio.
  • Falta de monitorización: Es imprescindible monitorizar completamente el servidor tanto antes de la migración si es el caso, como tras la implementación, SIEMPRE. Si disponemos de un servidor antiguo que tenemos que migrar, no monitorizarlo y conocer su comportamiento completamente nos llevará a problemas en un futuro. No hagamos conjeturas, y apoyémonos en datos. 
  • No conocer los objetivos comerciales: Este punto está muy ligado al primero pero tiene su razón de ser como punto independiente. Puede que el equipo de desarrollo haya desplegado una aplicación para los 500 clientes actuales y esos sean los datos que tenemos nosotros pero, si desde la dirección se han marcado el objetivo de doblar esa cifra cada ejercicio, pronto nuestro servidor no dará más de sí.
  • Sobreaprovisionamiento: Puede parecer una buena opción visto lo visto pero nada más lejos de la realidad. Aprovisionar más recursos de los que necesitamos o vamos a necesitar a corto plazo será un malgasto de recursos y no nos dejará en buen lugar como profesionales.

Cómo calcular un dimensionamiento correcto

Ahora que ya sabemos los puntos clave que debemos evitar vamos a ver uno a uno como debemos hacerlo.

Carga de trabajo

Como ya hemos dicho, comprender la carga de trabajo que afrontará nuestro servidor es el aspecto fundamental para un correcto dimensionamiento. Si hablamos de un servidor completamente nuevo nos tendremos que basar en las necesidades que nos indiquen los responsables del proyecto y cobrarán más sentido el resto de apartados. Si por el contrario estamos sustituyendo un servidor existente este punto es de vital importancia. Usaremos todos los recursos que tengamos a nuestra disposición y en ocasiones un trabajo de monitorización previo nos facilitará el trabajo.

En este sentido, a mi me gusta tener siempre en mis servidores un proceso que controle el crecimiento de los ficheros de base de datos (usando la vista sys.master_files por ejemplo) y que lo persista en una tabla de configuración. De esta manera a la hora de calcular el dimensionamiento podremos hacernos una idea clara del histórico de crecimiento de nuestras bases de datos. 

Para calcular las necesidades de otros recursos echaremos mano de las DMV que SQL Server pone a nuestra disposición, de Query Store o del monitor de rendimiento de Windows. Prestaremos especial atención a los tiempos de espera de nuestras consultas para, en la medida de lo posible, acabar con esos cuellos de botella.

Estrategia proactiva

Las bases de datos no son objetos estáticos, están continuamente cambiando y como tal, nosotros tendremos que monitorizar y verificar que las previsiones iniciales que hicimos son correctas. No solo hablo de las pruebas antes del “go live” sino de todo el ciclo de vida del servidor. Una buena monitorización nos permitirá pronosticar una futura necesidad de recursos y anticiparnos a ese dimensionamiento antes de que exista degradación en el rendimiento del servidor. 

El mercado está repleto de soluciones integrales de monitorización de rendimiento de SQL Server pero, cuando el presupuesto no lo permite, tendremos que ser creativos con las soluciones nativas sin dejar de lado esta tarea. Nuevamente las DMV de SQL Server, Query Store y el monitor de rendimiento de Windows serán nuestros aliados. Además, si persistimos estos datos, seremos capaces de analizar tendencias y predecir comportamientos en un futuro (de esto sabe mucho la gente de BI).

Objetivos Comerciales y dimensionamiento

No trabajamos solos, en la mayoría de los casos nuestras bases de datos son una pieza clave para el desempeño de la actividad de negocio. Sería de necios pensar que podemos hacer nuestro trabajo sin alinearnos con el resto de departamentos e ignorando los objetivos comerciales de nuestra organización. En este sentido, cuanto mayor sea nuestro conocimiento del sector, de la empresa en particular y de sus objetivos mejores previsiones podremos hacer.

Igualmente, esto va en los dos sentidos, es nuestra responsabilidad hacernos valer y que los jefes que toman las decisiones sepan que tienen que contar con nosotros. He trabajado en sitios donde no era así, se tomaban decisiones de negocio sin comunicar los objetivos comerciales al departamento de IT y sin trasladar las necesidades de crecimiento. ¿De verdad piensas que tus sistemas están preparados para asumir de la noche a la mañana una fusión que duplique la cantidad de clientes? 

Podríamos resumir este apartado en tres aspectos fundamentales, conoce los objetivos comerciales, involucra a todas las partes interesadas en la planificación y pronostica de manera adecuada la capacidad de los sistemas antes de que sea tarde. 

Escalabilidad, prepárate para un ajuste en el dimensionamiento

Como último punto a tener en cuenta pero no por ello menos importante tenemos que ser capaces de diseñar un sistema capaz de crecer. Ya hemos dicho que nuestras bases están vivas y cambian con el tiempo, normalmente, si todo va bien, crecerán. También hemos visto que sobredimensionar de primeras un sistema puede ser un malgasto de recursos. Aquí es donde entra en juego la escalabilidad. No voy a profundizar más en el concepto porque ya le hemos dedicado un artículo completo al tema que puedes leer aquí.

Es importante que conozcas y que trabajes conjuntamente con el equipo de infraestructura para brindar a tus servidores de esta capacidad. Y no solo con sistemas, confirma con los equipos de desarrollo si sus aplicativos están preparados para un escalado horizontal. Si es así, considera planificar nuevas máquinas, licencias y todo lo necesario para asumir el crecimiento futuro, aunque solo sea una planificación y no se implante a corto plazo es importante tenerlo documentado. 

Sin embargo, este escenario no es lo más común. Normalmente priorizaremos un escalado vertical, aumentando los recursos de nuestro servidor siempre que sea posible. Aquí entra en juego ese trabajo conjunto con los compañeros de sistemas del que estábamos hablando antes. No es lo mismo un escalado vertical en una máquina física que en una virtual o en la nube. Asegúrate de que tienes el presupuesto y la capacidad para crecer y hacer frente a las futuras capacidades del servicio.

Conclusión

El dimensionamiento adecuado de un servidor SQL Server es esencial para garantizar su rendimiento y eficiencia. Al tener en cuenta factores como la carga de trabajo, el rendimiento, la capacidad de almacenamiento y la concurrencia, y al utilizar las herramientas y técnicas adecuadas, podemos hacer una estimación precisa de los recursos necesarios para nuestro servidor. Aun así, el trabajo no termina ahí, las bases de datos están en constante crecimiento y tenemos que ser capaces de adelantarnos a las necesidades de recurso y redimensionar el servidor correctamente. 

Espero que este artículo te haya sido útil y que te ayude a dimensionar correctamente tus SQL Server.  Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Otros, 1 comentario

Introducción a Snowflake: ¿Qué es y por qué lo necesitas?

Snowflake es un sistema de gestión de bases de datos (SGBD) que se ejecuta en la nube y que ofrece una solución innovadora para el almacenamiento y el análisis de datos. En este artículo, vamos a explicarte qué es Snowflake, cómo funciona, cuáles son sus ventajas y cómo puedes empezar a usarlo para tus proyectos.

¿Qué es Snowflake?

Snowflake es un servicio de almacenamiento y procesamiento de datos en la nube que se basa en el concepto de data warehouse (almacén de datos). Un data warehouse es una base de datos centralizada que contiene los datos históricos y actuales de una organización, provenientes de diversas fuentes y sistemas. El objetivo de un data warehouse es facilitar el análisis y la toma de decisiones basadas en los datos.

Snowflake se diferencia de otros servicios de data warehouse en la nube por su arquitectura única, que separa el almacenamiento del procesamiento. Esto significa que los datos se almacenan en un espacio compartido y securizado, mientras que el procesamiento se realiza mediante unidades independientes llamadas warehouses (almacenes). Cada warehouse puede escalar de forma automática y elástica según la demanda, sin afectar al rendimiento ni a la disponibilidad de los datos.

Snowflake como SGBD

Snowflake es un SGBD que se basa en el modelo de datos relacional, pero que incorpora características propias de los sistemas NoSQL, como la escalabilidad, la flexibilidad y el rendimiento. Además, Snowflake se diferencia de otros SGBD en la nube por su arquitectura única, que se compone de tres capas:

  1. Capa de almacenamiento: donde se guardan los datos en formato comprimido y columnar, aprovechando las ventajas de los servicios de almacenamiento en la nube, como Amazon S3 o Microsoft Azure Blob Storage.
  2. Capa de computación: donde se procesan las consultas de los usuarios, utilizando unidades de procesamiento independientes llamadas almacenes virtuales (virtual warehouses), que se pueden escalar horizontal y verticalmente según la demanda.
  3. Capa de servicios: donde se gestionan aspectos como la seguridad, el acceso, la metadatos, el caché y la optimización de las consultas.

Otras características

Además, Snowflake ofrece una serie de características que lo hacen más flexible, eficiente y seguro que otros servicios similares. Algunas de estas características son:

  • Soporta múltiples formatos de datos, desde estructurados (como tablas) hasta semi-estructurados (como JSON o XML).
  • Permite crear múltiples vistas lógicas de los datos, llamadas databases (bases de datos), schemas (esquemas) y tables (tablas), sin duplicar ni mover los datos físicamente.
  • Facilita el intercambio y la colaboración entre diferentes usuarios y organizaciones, mediante el uso de shares (comparticiones) y roles (roles).
  • Implementa un sistema de seguridad basado en encriptación, autenticación y autorización, que garantiza la protección y el control de los datos en todo momento.
  • Integra fácilmente con otras herramientas y servicios de la nube, como AWS, Azure o Google Cloud Platform, así como con aplicaciones de business intelligence (BI) o machine learning (ML).

Ventajas de Snowflake

Gracias a esta arquitectura, Snowflake ofrece una serie de beneficios para los usuarios, como:

  • Separación entre el almacenamiento y la computación: lo que permite pagar solo por lo que se usa y ajustar los recursos según las necesidades.
  • Concurrencia ilimitada: lo que significa que se pueden ejecutar múltiples consultas al mismo tiempo sin afectar al rendimiento ni generar cuellos de botella.
  • Elasticidad: lo que implica que se puede escalar el sistema fácilmente, tanto en capacidad como en rendimiento, sin tener que realizar cambios en el código ni en la estructura de los datos.
  • Compatibilidad: lo que hace que se pueda acceder a los datos desde diferentes herramientas y lenguajes, como SQL, Python, R, Spark, Power BI, Tableau o Looker.
  • Seguridad: lo que garantiza que los datos están protegidos por cifrado, autenticación, autorización y auditoría.

¿Por qué necesitas Snowflake?

Snowflake es una solución ideal para las organizaciones que quieren aprovechar el potencial de los datos en la nube, sin tener que preocuparse por la infraestructura, el mantenimiento o la escalabilidad. Con Snowflake, puedes:

  • Almacenar y procesar grandes cantidades de datos con rapidez y eficiencia, gracias a su arquitectura optimizada para la nube.
  • Acceder y analizar los datos desde cualquier lugar y dispositivo, mediante una interfaz web o una API.
  • Obtener insights valiosos para tu negocio, mediante consultas SQL o herramientas de BI o ML integradas.
  • Reducir los costes operativos y optimizar los recursos, pagando solo por lo que usas y ajustando el tamaño de los warehouses según tus necesidades.
  • Mejorar la calidad y la fiabilidad de los datos, mediante procesos de limpieza, transformación y validación.
  • Fomentar la innovación y la competitividad, creando nuevos productos y servicios basados en los datos.

¿Cómo empezar a usar Snowflake?

Para empezar a usar Snowflake, lo primero que hay que hacer es crear una cuenta en su página web y elegir el plan que mejor se adapte a las necesidades del proyecto. Hay diferentes planes disponibles, desde el gratuito (Snowflake Free Trial) hasta el empresarial (Snowflake Enterprise).

Una vez creada la cuenta, se puede acceder al panel de control (Snowflake Web Interface), donde se pueden realizar diferentes acciones, como crear bases de datos y esquemas, cargar datos desde diferentes fuentes, crear almacenes virtuales y asignarles recursos, ejecutar consultas SQL y ver los resultados o monitorizar el uso y el rendimiento del sistema

Además del panel de control, también se puede interactuar con Snowflake desde otras interfaces, como la línea de comandos (SnowSQL), el conector JDBC o ODBC, su API REST o los drivers para diferentes lenguajes (Python, Java, Node.js, etc.)

¿Cómo usar Snowflake en las nubes de Azure o AWS?

Snowflake está disponible en las principales plataformas de nube pública, como Azure o AWS. Esto significa que se puede elegir la nube que mejor se adapte a las preferencias y requisitos del proyecto. Además, se puede aprovechar las características y servicios específicos de cada nube, como la integración con otros productos o la disponibilidad regional.

Para usar Snowflake en Azure o AWS, hay que seguir unos pasos similares a los que se describen a continuación:

  1. Crear una cuenta en Snowflake y elegir el plan adecuado.
  2. Elegir la región y la nube donde se quiere desplegar Snowflake.
  3. Crear una base de datos y un esquema en Snowflake.
  4. Cargar los datos desde la nube o desde otras fuentes externas.
  5. Crear un almacén virtual y asignarle los recursos necesarios.
  6. Conectar Snowflake con las herramientas o lenguajes que se quieran usar para acceder a los datos.

Para aprender más sobre cómo usar Snowflake, te recomendamos que consultes la documentación oficial, donde encontrarás guías, tutoriales y ejemplos prácticos. También puedes visitar el blog de Snowflake, donde podrás leer artículos sobre las últimas novedades y casos de éxito del servicio.

Conclusión

Snowflake es un SGBD de datos en la nube que permite almacenar, procesar y analizar grandes volúmenes de información de forma rápida, eficiente y segura. Con Snowflake, puedes crear una arquitectura de datos moderna y escalable, que te ayude a obtener insights valiosos para tu negocio y a impulsar la innovación y la competitividad. Si quieres empezar a usar Snowflake, solo tienes que crear una cuenta en su página web y seguir los pasos que te hemos indicado en este artículo. Puedes probarlo gratis durante 30 días, visita su página web oficial.

Espero que este artículo te haya sido útil y que te ayude a optimizar el rendimiento de tus consultas en SQL Server. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Otros, 1 comentario