cloud

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

El futuro de los DBAs: Tendencias y predicciones

La administración de bases de datos es una profesión que requiere de conocimientos técnicos, experiencia y capacidad de adaptación. Los DBAs somos los responsables de garantizar el correcto funcionamiento, la seguridad y el rendimiento de los sistemas de información que almacenan y procesan grandes cantidades de datos. Pero, ¿Qué nos espera a los administradores de bases de datos en el futuro? ¿Qué tendencias y predicciones se pueden anticipar en este campo tan dinámico y cambiante? En este artículo, vamos a analizar algunos de los aspectos más relevantes que marcarán el rumbo de la administración de bases de datos en los próximos años.

La nube como escenario principal de un futuro cercano

Una de las tendencias más evidentes y consolidadas en el ámbito de la administración de bases de datos es el uso de la nube como plataforma para alojar y gestionar los datos. La nube ofrece ventajas como la escalabilidad, la flexibilidad, la disponibilidad y la reducción de costes, que la hacen muy atractiva para las empresas que necesitan almacenar y analizar grandes volúmenes de datos.

La nube también supone un reto para los administradores de bases de datos, que debemos adaptarnos a las características y requerimientos específicos de cada proveedor y servicio cloud. Además, la nube implica una mayor complejidad en la gestión de la seguridad, el cumplimiento normativo y la integración con otros sistemas.

Los administradores de bases de datos debemos estar preparados para trabajar con diferentes tipos de bases de datos en la nube, como las relacionales, las no relacionales, las híbridas o las distribuidas. Asimismo, debemos conocer las herramientas y servicios que facilitan la migración, la monitorización, el respaldo y la recuperación de los datos en la nube.

La inteligencia artificial del futuro como aliada

Otra tendencia que está revolucionando el mundo de la administración de bases de datos es la aplicación de la inteligencia artificial (IA) para optimizar y automatizar diversas tareas y procesos. La IA puede ayudarnos a los administradores de bases de datos a mejorar el rendimiento, la eficiencia y la calidad de los sistemas de información.

La Inteligencia Artificial puede contribuir a mejorar aspectos como:

  • La configuración y el ajuste de los parámetros y recursos de las bases de datos.
  • La detección y resolución de problemas e incidencias.
  • La prevención y mitigación de riesgos y amenazas.
  • La generación y análisis de informes y métricas.
  • La recomendación y aplicación de mejores prácticas.

La IA también puede facilitarnos el aprendizaje y la actualización continua a los administradores de bases de datos, al proporcionarnos información relevante, sugerencias y feedback sobre su trabajo. Además, la IA puede permitir una mayor colaboración e interacción entre los administradores de bases de datos y otros profesionales involucrados en el ciclo de vida de los datos.

La diversidad como realidad

Un tercer aspecto que caracteriza el futuro de la administración de bases de datos es la diversidad. La diversidad se refiere tanto a los tipos y formatos de los datos como a las fuentes y aplicaciones que los generan y consumen.

Los administradores de bases de datos debemos estar capacitados para trabajar con diferentes tipos de datos, como los estructurados, los no estructurados, los semiestructurados, los temporales, los espaciales o los multimedia. Cada tipo de dato tiene sus propias particularidades y desafíos en cuanto a su almacenamiento, procesamiento, análisis y visualización.

Los administradores de bases de datos también debemos estar familiarizados con las diversas fuentes y aplicaciones que producen y utilizan los datos, como las redes sociales, los dispositivos móviles, los sensores, las cámaras, los asistentes virtuales o las plataformas de comercio electrónico. Estas fuentes y aplicaciones generan una gran cantidad y variedad de datos, que requieren de una gestión ágil, eficaz y segura.

Conclusión

La administración de bases de datos es una profesión apasionante, que ofrece múltiples oportunidades y desafíos. Los administradores de bases de datos debemos estar al día de las tendencias y predicciones que marcan el futuro de nuestro campo, y contar con las habilidades y competencias necesarias para afrontarlos con éxito.

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, 0 comentarios

Escalado vertical y horizontal en SQL Server y Azure

¿Qué es el escalado en SQL Server y por qué es importante? En este artículo vamos a explicar los conceptos de escalado vertical y horizontal, las diferencias entre ellos y las ventajas y desventajas de cada uno. También veremos cómo aplicar estas técnicas en SQL Server, tanto en la versión On Premise como en la nube de Azure.

¿Qué es el escalado vertical y horizontal?

El escalado es la capacidad de aumentar o disminuir los recursos de un sistema para adaptarse a las necesidades de rendimiento y disponibilidad. Existen dos tipos de escalado: vertical y horizontal.

– El escalado vertical consiste en incrementar o reducir la potencia de un único servidor, ya sea añadiendo o quitando memoria, CPU, disco o cualquier otro componente. Por ejemplo, si tenemos un servidor con 8 GB de RAM y lo ampliamos a 16 GB, estamos haciendo un escalado vertical.

– El escalado horizontal consiste en agregar o eliminar servidores al sistema, de forma que se distribuya la carga entre ellos. Por ejemplo, si tenemos un servidor con 8 GB de RAM y le añadimos otro igual, estamos haciendo un escalado horizontal.

Ventajas y desventajas del escalado vertical y horizontal

Cada tipo de escalado tiene sus pros y sus contras, que debemos tener en cuenta a la hora de elegir la mejor opción para nuestro sistema.

Escalado vertical

– Ventajas: Es más sencillo de implementar, ya que no requiere cambios en la arquitectura ni en el código de la aplicación. Además, al tener un único servidor, se evitan problemas de sincronización, consistencia y latencia entre los nodos.

– Desventajas: Tiene un límite físico, ya que no podemos aumentar indefinidamente los recursos de un servidor. También implica un mayor coste, ya que los componentes más potentes suelen ser más caros. Además, al tener un único punto de fallo (SPOF), se reduce la disponibilidad del sistema.

Escalado horizontal

– Ventajas: Permite un mayor crecimiento, ya que podemos agregar tantos servidores como necesitemos. También implica un menor coste, ya que podemos aprovechar servidores más económicos y estándar. Además, al tener varios nodos, se aumenta la disponibilidad y la tolerancia a fallos del sistema.

– Desventajas: Es más complejo de implementar, ya que requiere cambios en la arquitectura y en el código de la aplicación. Además, al tener varios servidores, se generan problemas de sincronización, consistencia y latencia entre los nodos.

¿Cómo escalar SQL Server On Premise?

Para escalar SQL Server On Premise tenemos varias opciones, dependiendo del tipo de escalado que queramos realizar.

Escalado vertical On Premise

Para hacer un escalado vertical On Premise debemos modificar el hardware del servidor donde está instalado SQL Server. Esto, en algunos casos, implica detener el servicio, cambiar los componentes y reiniciar el servidor. Estos problemas desaparecen, en gran medida, cuando hablamos de servidores virtuales. Algunas recomendaciones para hacer un buen escalado vertical son:

  • Elegir componentes compatibles con el servidor y con SQL Server. 
  • Prestar atención al licenciamiento, algunas ediciones y modos de licenciamiento de SQL Server tienen limitaciones en cuanto a CPU y RAM y si los superamos deberemos adquirir otra licencia.
  • Ajustar los parámetros de configuración de SQL Server según los nuevos recursos.
  • Realizar pruebas de rendimiento antes y después del cambio para verificar la mejora.

Escalado horizontal On Premise

Para hacer un escalado horizontal On Premise debemos agregar más servidores al sistema y distribuir la carga entre ellos. Esto implica crear una arquitectura distribuida, como un clúster, una réplica o una partición. Algunas recomendaciones para hacer un buen escalado horizontal son:

  • Elegir servidores con características similares al existente.
  • Configurar correctamente la redirección del tráfico entre los nodos.
  • Mantener la sincronización y la consistencia de los datos entre los nodos.

Las réplicas de solo lectura de los grupos de disponibilidad Always On son un ejemplo de este tipo de escalado. Añadiendo una réplica de solo lectura a nuestro grupo de disponibilidad podremos redirigir a ella las operaciones de lectura descargando de trabajo el nodo principal.

¿Cómo escalar SQL Server en Azure?

Para escalar SQL Server en Azure tenemos varias opciones, dependiendo del tipo de servicio que estemos usando.

Escalado vertical en Azure

Para hacer un escalado vertical en Azure debemos modificar el tamaño del servicio donde está alojado SQL Server. Esto implica cambiar el nivel de servicio o el plan de tarifa, lo que puede implicar un cambio de precio. Algunas ventajas de hacer un escalado vertical en Azure son:

  • No requiere detener el servicio ni reiniciar el servidor.
  • Se puede hacer desde el portal de Azure o mediante scripts.
  • Se puede automatizar según las métricas de rendimiento.
  • Valorar el apagado de los servicios cuando no están en uso para un menor coste. Esto es especialmente útil cuando hablamos de entornos de desarrollo y pruebas.

Mención especial en este apartado para las bases de datos de Azure en modo de licenciamiento sin servidor donde podremos adaptar los recursos según la carga de trabajo. Aumentando en horas punta y disminuyendo la cantidad de recursos en momentos de menos carga.

Otra opción muy interesante que se nos plantea en Azure son los grupos de recursos, podremos asignar un extra de recursos a un grupo con varios servicios para que los usen en caso de ser necesario. Esto nos permite no tener que sobredimensionar todos y cada uno de los servicios por separado y reducir costes. Si, por ejemplo, nuestra base de datos transaccional tiene su pico de trabajo por el día y la informacional por la noche podrán compartir un grupo de recursos.

Escalado horizontal en Azure

Para hacer un escalado horizontal en Azure debemos agregar más instancias al servicio donde está alojado SQL Server. Esto implica crear un balanceador de carga o un grupo de escalado, lo que puede implicar un cambio de precio. Además, en Azure podemos aprovechar las bases de datos elásticas, que son un tipo de servicio que permite escalar horizontalmente una base de datos SQL sin tener que gestionar los servidores ni la distribución de los datos. Las bases de datos elásticas se componen de un grupo de bases de datos que comparten recursos y se balancean automáticamente según la demanda. d.

Conclusión

El escalado es una técnica fundamental para optimizar el rendimiento y la disponibilidad de SQL Server, tanto en la versión On Premise como en la nube de Azure. Dependiendo de las necesidades y los recursos disponibles, podemos optar por un escalado vertical o horizontal, cada uno con sus ventajas y desventajas. Tienes que tener en cuenta que estos modos no son excluyentes, nuestra aplicación puede hacer uso de una base de datos de Azure por cliente, escalando horizontalmente con cada nuevo cliente y, a la vez, escalar verticalmente una base de datos cuando el volumen de datos o transacciones de un cliente lo requiera. Lo importante es elegir la opción más adecuada para nuestro sistema y realizar las pruebas necesarias para verificar la mejora.

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 Cloud, Rendimiento, SQL Server, 2 comentarios

Administración de Instancias SQL en Azure

Ayer hablamos en profundidad sobre las instancias administradas de SQL Server en Azure y os prometí dedicar el post de hoy a temas de administración. Vamos a empezar hablando de los modos de licenciamiento y lo que nos ofrece cada uno de ellos y, a continuación, ya entraremos en materia con la administración.

Licenciamiento de instancias administradas en Azure

Como DBAs es probable que recaiga sobre nosotros la elección de la arquitectura SQL y por tanto su licenciamiento. En el caso de las instancias administradas de SQL Server en Azure el modelo de compra se basa en núcleos virtuales. Esto quiere decir que recursos como la RAM dependerán de la cantidad de núcleos de CPU que seleccionemos y no podremos ampliar un recurso sin el resto. Además de los núcleos tenemos otras opciones, por un lado podremos elegir el tipo de hardware y el nivel de servicio. Sé que es un poco lioso así, no os preocupéis que vamos a verlo con detalle.

En base al hardware, tenemos tres planes disponibles: el Gen5, el Premium y el Premium optimizados para memoria. La diferencia entre el Gen5 y el Premium es el tipo de procesador y, por tanto, su velocidad. Además el plan Premium nos da algo más de RAM por cada núcleo que contratemos. El Premium y Premium optimizado para memoria solo se diferencian en que este segundo da aún más RAM por cada núcleo. 

Además, como hemos comentado, cualquiera de estos tres planes se puede contratar en dos niveles de servicio: estándar o crítico para la empresa. El nivel estándar nos proporcionará 16Tb de Azure Blob Storage de alto rendimiento y alta disponibilidad basada en Azure Blob Storage y Azure Service Factory. El nivel crítico para la empresa cambia la opción de almacenamiento por un SSD local extremadamente rápido que reduce la latencia de E/S. El tamaño del SSD variará en función del plan de hardware. Otras ventajas del nivel de servicio crítico es la alta disponibilidad Always On y una réplica de solo lectura adicional. Por último, este nivel, añade OLTP en memoria para usarse en cargas con necesidades de rendimiento muy altas.

La siguiente tabla resume todo lo que hemos comentado, para precios Microsoft ha puesto a nuestra disposición esta calculadora.

Operaciones de administración

Ahora que ya sabemos que opción contratar es momento de crear nuestra primera instancia. Para crear instancias, igual que para cambiar su configuración o eliminarlas, podremos hacerlo desde Azure Portal, usando PowerShell o la CLI (Command Line Interface) de Azure. Al crear una instancia tenemos que elegir el nombre, la ubicación, la versión y la edición de SQL Server, el tamaño del almacenamiento y la configuración del firewall. En cuanto a la configuración, podremos cambiar algunos parámetros como el número de núcleos virtuales (vCores), la cantidad de memoria RAM o el tamaño del almacenamiento. También podemos habilitar o deshabilitar algunas características como el Always On Availability Groups o el Transparent Data Encryption.

Copias de seguridad y restauraciones en instancias en Azure

Antes de empezar con este tema, vamos a hablar de una cosa que todos estáis pensando y que no es para menos. Con la presentación de SQL Server 2022 se nos mostró una funcionalidad llamada “Vínculo para Azure Managed Instance” que, haciendo uso de grupos de disponibilidad distribuidos, nos permitiría mantener sincronizados nuestro entorno On Premise con Azure. Sin embargo, aunque SQL Server 2022 salió al mercado en diciembre de 2022, a día de hoy (Enero de 2024) sigue siendo una versión preliminar que no está disponible para todo el mundo. Sé lo que estáis pensando, es una CHAPUZA que, habiendo pasado más de un año siga sin estar disponible esta característica. No olvidemos que es una de las principales novedades que justificaría la migración a esta versión de SQL Server. Yo tampoco lo entiendo.

Vale, pasemos página y dejemos atrás lo malo (aunque no lo olvidemos) y hablemos de las copias de seguridad en las instancias de Azure. Las copias de seguridad principales, son automáticas y no vamos a poder configurar nada. Las instancias administradas realizan copias de seguridad automáticas cada 5-10 minutos (dependiendo del tamaño de las bases de datos) y las almacenan en un almacenamiento redundante. Podemos restaurar nuestras bases de datos desde estas copias usando Azure Portal o PowerShell. 

Sin embargo, nosotros también podemos realizar copias de seguridad manuales por nuestra cuenta usando T-SQL o PowerShell y almacenarlas en un almacenamiento externo como Azure Blob Storage o un recurso compartido SMB. Estas copias siempre serán Copy-Only para no interferir en la cadena principal de copias automáticas. 

En cuanto a restauración de copias manuales, podremos usar T-SQL o PowerShell para restaurar nuestras copias en la instancia de Azure. Nuestra instancia administrada admitirá copias de otras bases de datos de Azure y de cualquier SQL Server superior a 2008. En el otro sentido, solo podremos restaurar copias de seguridad de Azure en SQL Server 2022.

Actualizaciones de instancias administradas en Azure

Las instancias administradas se actualizan solas con los últimos parches y mejoras de SQL Server sin necesidad de intervención manual. Sin embargo, sí tendremos que elegir entre dos modos de actualización: automático o manual. En el modo automático, las actualizaciones se aplican tan pronto como están disponibles mientras que en modo manual, podemos elegir cuándo aplicarlas. Os recomiendo este último modo para actualizar siempre dentro de una ventana de mantenimiento.

Monitorización de instancias administradas en Azure

Podemos monitorizar y diagnosticar nuestras instancias administradas usando las herramientas habituales que ya conocemos como SQL Server Management Studio o Extended Events. También podemos usar los servicios integrados de Azure como Azure Monitor o Azure SQL Analytics para obtener métricas e insights sobre el rendimiento, la disponibilidad y la salud de nuestras instancias.

Conclusión

Como hemos visto en este artículo y en el anterior, las instancias SQL Server administradas de Azure son una gran solución PAAS en el cloud de Microsoft. Nos ofrecen prácticamente todas las características de un SQL Server local sin necesidad de tenerlo en nuestra infraestructura. Además, Azure se encarga de las copias de seguridad por nosotros y nos garantiza una disponibilidad con un SLA cercano al 100%. Por contra, perdemos flexibilidad a la hora de gestionar ciertos temas de configuración de recursos y nos limita a 16 Tb de espacio en disco. ¿Qué opináis? ¿Trabajáis con esta solución?¿Os planteáis migrar a este servicio? Os leo en comentarios. También podéis dejar vuestro feedback en nuestro Twitter o en nuestro nuevo grupo de LinkedIn.

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

Instancias Administradas en Azure (Introducción)

En este artículo vamos a hablar de las instancias administradas de SQL Server en Azure, un servicio que nos permite tener una experiencia casi idéntica a la de un servidor SQL Server tradicional, pero con las ventajas de la nube. Las instancias administradas de SQL Server en Azure son una opción ideal para migrar nuestras bases de datos SQL Server existentes a Azure sin tener que modificar mucho el código ni la configuración. Además, nos ofrecen todas las ventajas de la nube como un alto nivel de rendimiento, seguridad, escalabilidad y disponibilidad.

¿Qué son las instancias administradas de SQL Server en Azure?

Las instancias administradas de SQL Server en Azure son un tipo de servicio PaaS (Platform as a Service) que nos permite crear y administrar instancias de SQL Server en la nube. Estas instancias tienen casi las mismas características y funcionalidades que un servidor SQL Server tradicional. También soportan las mismas versiones y ediciones de SQL Server, desde la 2008 hasta la 2022, y se actualizan automáticamente con los últimos parches y mejoras.

Las instancias administradas de SQL Server en Azure se diferencian de otros servicios de bases de datos SQL en Azure en que nos permiten tener un mayor control sobre la instancia, como el acceso al sistema operativo, la configuración del firewall, la administración de usuarios y roles, la auditoría y el seguimiento, etc. Además, nos permiten usar características avanzadas de SQL Server que no están disponibles en otros servicios, como el Always On Availability Groups, el Transparent Data Encryption, el Change Data Capture, el Service Broker, etc.

¿Cómo se administran?

La administración de las instancias administradas de SQL Server en Azure es muy similar a la de un servidor SQL Server tradicional. Podemos usar las mismas herramientas y métodos que estamos acostumbrados a usar, como el SQL Server Management Studio, PowerShell o T-SQL. También podemos usar los servicios integrados de Azure para facilitar algunas tareas, como el Azure Portal, el Azure Monitor o el Azure Automation. Veremos más sobre este tema en otro post.

Instancias administradas en Azure VS instancias On Premise

Las instancias On Premise son aquellas que se ejecutan en nuestros propios servidores físicos o virtuales, dentro de nuestra infraestructura local. Estas instancias tienen algunas ventajas sobre las instancias administradas en Azure, como un mayor control sobre el hardware, una menor latencia y una mayor personalización. Sin embargo, también tienen algunos inconvenientes, como un mayor coste, una mayor complejidad y una menor flexibilidad.

Las instancias administradas en Azure nos ahorran los costes y las molestias de tener que comprar, instalar y mantener nuestros propios servidores. Además, nos ofrecen una mayor escalabilidad y disponibilidad, ya que podemos aumentar o reducir los recursos según la demanda y contar con la garantía de un SLA (Service Level Agreement) del 99.99%. También nos facilitan la migración y la recuperación de nuestras bases de datos, ya que podemos usar herramientas como el Data Migration Service o el Backup and Restore.

La elección entre las instancias administradas o las instancias on premise dependerá de nuestras necesidades y preferencias. Si queremos tener una solución más económica y flexible, con todas las ventajas de la nube, las instancias administradas son la mejor opción. Si queremos tener una solución más personalizada y con menos dependencia de internet, las instancias on premise pueden ser suficientes.

Instancias administradas en Azure VS Bases de datos de Azure

El servicio de bases de datos SQL en Azure es otro tipo de servicio PaaS que nos permite crear y administrar bases de datos SQL en la nube como ya vimos en el post anterior. Sin embargo, a diferencia de las bases de datos de Azure, las instancias administradas nos ofrecen una instancia completa de SQL Server y no solo una base de datos aislada que se ejecuta en un servidor compartido con otros clientes. Esto implica que tenemos mayor control sobre la base de datos y que podemos usar algunas características de SQL Server propias de la instancia.

El servicio de bases de datos SQL en Azure tiene algunas ventajas sobre las instancias administradas, como un menor coste, una mayor elasticidad y una menor complejidad. Sin embargo, también tiene algunas limitaciones, como una menor compatibilidad con las versiones y ediciones de SQL Server, una menor capacidad para escalar verticalmente y una menor flexibilidad para migrar o restaurar bases de datos.

La elección entre las instancias administradas o el servicio de bases de datos SQL en Azure dependerá de nuestras necesidades y preferencias. Si queremos tener una experiencia similar a la de un servidor SQL Server tradicional, con todas sus características y funcionalidades, las instancias administradas son la mejor opción. Si queremos tener una solución más simple y económica, con solo lo necesario para alojar nuestras bases de datos SQL, el servicio de bases de datos SQL en Azure puede ser suficiente.

Conclusión

Las instancias administradas de SQL Server en Azure son un servicio que nos ofrece una forma fácil y rápida de migrar nuestras bases de datos SQL Server existentes a la nube, sin perder ninguna característica ni funcionalidad. Se trata de un servicio PaaS que nos brinda un alto nivel de rendimiento, seguridad, escalabilidad y disponibilidad, así como un gran control sobre la instancia. Como esto se alargaba ya demasiado, mañana hablamos de temas más técnicos de la administración de este servicio (que seguro que os interesa más), mientras tanto, podéis dejarme vuestros comentarios aquí abajo, en Twitter o por mail.

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

Azure Database: SQL sin servidor

Seguimos con los artículos sobre SQL en la nube, ya hemos visto por encima todas las posibles soluciones de SQL en Cloud. Hoy quiero compartir con vosotros mi experiencia con Azure Databases, el servicio de bases de datos en la nube de Microsoft. ¿Qué ventajas tiene frente a otras opciones? ¿Cómo podemos migrar nuestras bases de datos SQL Server a Azure? ¿Qué retos y oportunidades nos ofrece este servicio? Estas son algunas de las preguntas que intentaremos responder en este artículo.

¿Qué es Azure Database?

Azure Databases es una plataforma que nos permite crear, administrar y escalar bases de datos en la nube, sin tener que preocuparnos por el hardware, el software o la infraestructura. Podemos elegir entre diferentes tipos de bases de datos, según nuestras necesidades y preferencias: SQL Database, MySQL, PostgreSQL, MariaDB, Cosmos DB, etc. Cada una de estas opciones tiene sus propias características, ventajas y desventajas, que podéis consultar en la documentación oficial de Azure.

Nosotros nos vamos a centrar en SQL Database, que es el servicio que nos permite usar SQL Server en la nube. SQL Server es uno de los sistemas de gestión de bases de datos relacionales más populares y potentes del mercado, y con Azure Databases podemos aprovechar todas sus funcionalidades y beneficios, pero con una mayor flexibilidad, escalabilidad y seguridad.

Una de las funcionalidades más interesantes que nos ofrece SQL Database en Azure es la posibilidad de usar SQL sin servidor (serverless SQL). ¿Qué significa esto? Significa que podemos crear una base de datos que solo consume recursos cuando está activa, y que se pausa automáticamente cuando no hay actividad. De esta forma, podemos ahorrar costes y optimizar el uso de los recursos. Además, podemos escalar la base de datos según la demanda, sin tener que especificar un tamaño fijo.

¿Qué beneficios tiene usar SQL sin servidor?

Algunos de los más destacados son:

  • No tenemos que comprar ni mantener servidores físicos ni licencias de software. Solo pagamos por lo que usamos, según el tiempo y el rendimiento que consuma nuestra base de datos.
  • Podemos crear y eliminar bases de datos rápidamente, sin tener que esperar a que se aprovisionen o desaprovisionen los recursos.
  • Podemos adaptar nuestra base de datos a las fluctuaciones del tráfico o la actividad, sin tener que hacer cambios en el código ni en la configuración. Azure se encarga de ajustar los recursos automáticamente según la demanda.
  • Podemos acceder a nuestra base de datos desde cualquier lugar y dispositivo, usando las herramientas y lenguajes que prefiramos. Azure nos ofrece una alta disponibilidad y redundancia, garantizando un tiempo de actividad del 99,99%.
  • Podemos proteger nuestra base de datos con las mejores prácticas de seguridad, como el cifrado de datos en reposo y en tránsito, el control de acceso basado en roles, la auditoría y el monitoreo. Además, Azure nos ofrece copias de seguridad automáticas y opciones de recuperación ante desastres.
  • Podemos integrar nuestra base de datos con otros servicios de como Azure Synapse Analytics, Azure Machine Learning o Azure Data Factory, para obtener más valor e insights de nuestros datos.

¿Cómo podemos crear una base de datos SQL sin servidor en Azure?

El proceso es muy sencillo y podéis seguir los pasos que se indican aquí. Básicamente, tenemos que:

  1. Acceder al portal de Azure e ir al servicio SQL Database.
  2. Hacer clic en Crear recurso y seleccionar Base de datos única.
  3. Rellenar los campos del formulario con los datos de nuestra base de datos: nombre, grupo de recursos, servidor, etc.
  4. En el apartado Tamaño + rendimiento, elegir la opción vCore como modelo de compra y seleccionar la casilla Habilitar SQL sin servidor.
  5. Configurar los límites mínimos y máximos de vCore y memoria para nuestra base de datos.
  6. Revisar y crear la base de datos.

Una vez creada la base de datos, podemos conectarnos a ella usando las herramientas y lenguajes que prefiramos: SSMS, Azure Data Studio, Visual Studio Code, PowerShell, etc. También podemos usar el portal de Azure para administrar y monitorear nuestra base de datos.

¿Qué necesitamos para implementar una base de datos de Azure?

Como todo cambio tecnológico, usar SQL sin servidor en Azure implica algunos desafíos y adaptaciones, pero también nos abre un mundo de posibilidades. Algunos aspectos a tener en cuenta son:

  • Debemos elegir bien el nivel de rendimiento y los límites de recursos que queremos para nuestra base de datos. Azure nos ofrece una calculadora de precios que nos ayuda a estimar el coste de nuestra base de datos según el tiempo y el rendimiento que consuma.
  • Debemos tener en cuenta que nuestra base de datos se pausará automáticamente cuando no haya actividad, lo que puede afectar al tiempo de respuesta de la primera consulta después de la reanudación. Podemos configurar el tiempo de espera antes de la pausa, que por defecto es de una hora, según nuestras preferencias.
  • Debemos aprovechar las nuevas funcionalidades y características que nos ofrece SQL sin servidor en Azure. Por ejemplo, podemos usar la inteligencia artificial para mejorar la calidad y el análisis de nuestros datos, usando servicios como Cognitive Services o Azure Machine Learning. También podemos usar la computación distribuida para procesar grandes volúmenes de datos, usando servicios como Azure Synapse Analytics o Azure Databricks.

¿Cómo podemos migrar nuestra base de datos SQL Server a Azure?

Hay varias opciones disponibles, según el tamaño y la complejidad de nuestra base de datos. Algunas de las más comunes son:

  • Usar la herramienta Data Migration Assistant (DMA) que ya hemos visto en profundidad en este post.
  • Utilizar el servicio Azure Database Migration Service (DMS), que nos permite migrar nuestra base de datos online u offline, con una mínima interrupción del servicio y una alta fiabilidad.
  • Usar el método bacpac, que consiste en exportar nuestra base de datos a un archivo .bacpac y luego importarlo a Azure mediante el portal o PowerShell.
  • Utilizar el método log shipping, que consiste en copiar los archivos .mdf y .ldf de nuestra base de datos a un blob storage en Azure y luego restaurarlos mediante T-SQL.

Conclusión

SQL sin servidor en Azure es una excelente opción para usar SQL Server en la nube, con todas las ventajas que ello implica. Nosotros hemos creado algunas bases de datos SQL sin servidor en Azure y estamos muy satisfechos con los resultados. Os animamos a que lo probéis y nos contéis vuestra experiencia. Si tenéis alguna duda o comentario, podéis escribirnos por mail o seguirnos en nuestra cuenta de Twitter. ¡Hasta la próxima!

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