Infra

Estado del mercado de bases de datos en 2025

Hacer un estudio de mercado sobre tecnologías de bases de datos es una de esas tareas que a primera vista suena a powerpoint corporativo, pero que en manos de técnicos con cicatrices se convierte en una radiografía útil del presente y futuro del sector. Así que vamos a destripar el Top-20 de DB‑Engines de agosto de 2025 sin frases motivadoras ni colorines innecesarios. 

TDLR: lo relacional sigue mandando, lo NoSQL crece y lo demás se mueve al ritmo del hype y la nube.

¿Qué es DB‑Engines y por qué lo usamos como termómetro?

DB‑Engines es una iniciativa creada y mantenida por Red-Gate, una empresa especializada en tecnología de bases de datos. No es una asociación, ni un organismo oficial, ni un spin-off académico. Es una plataforma privada e independiente que publica un ranking mensual de sistemas de bases de datos en función de su popularidad.

¿Y qué mide exactamente?

Al contrario de lo que pudiera parecer no mide rendimiento, ni instalaciones reales, ni cuota de mercado. Mide señales públicas de atención y actividad técnica: menciones en foros, frecuencia de búsqueda en Google, apariciones en LinkedIn, preguntas en Stack Overflow, ofertas de trabajo y artículos técnicos publicados. Es decir, mide qué motores generan conversación, formación, interés profesional y visibilidad.

DB‑Engines también publica comparativas entre motores, artículos explicativos y datos históricos. Pero su producto estrella es el ranking mensual, seguido por empresas, arquitectos y responsables técnicos como referencia de tendencia, no como oráculo infalible. Si una tecnología sube, es porque hay más gente hablando de ella. Si baja, puede que siga en producción, pero ya no ocupa tantas portadas ni conferencias.

¿Refleja esto la realidad de los entornos críticos? No siempre. ¿Sirve para entender hacia dónde se mueve la conversación y, por tanto, la demanda de conocimiento? Sin duda. Lo usamos no porque sea perfecto, sino porque es el mejor termómetro disponible para medir la temperatura del mercado.

Relacional manda: sí, todavía

Del TOP 20 del ranking de motores de bases de datos, doce son relacionales puros o “multi-modelo con ADN relacional”. No hablamos solo de Oracle, MySQL, SQL Server y PostgreSQL; también están Snowflake, Db2, SQLite, MariaDB, Microsoft Access (sí, todavía), Azure SQL Database, Hive y BigQuery.

Traducción técnica: si tu carga es OLTP, OLAP o una mezcla de ambas, sigues teniendo un core relacional como referencia. Todo lo demás (documentales, grafos, clave-valor, búsqueda) se consolida como satélite especializado. No es que el NoSQL haya muerto. Es que no ha conquistado el núcleo.

PostgreSQL: el ganador moral

PostgreSQL sube más de 33 puntos en el año. No es casualidad. La comunidad lo adora, los hyperscalers lo ofrecen como servicio gestionado, y se adapta con extensiones que lo vuelven polivalente: pgvector para IA, Timescale para series temporales, FDW para federación, Logical Replication para entornos distribuidos.

¿La clave? Es open source de verdad, no con asterisco. Y satisface a arquitectos que quieren potencia sin vender un riñón por licencia. Es, en muchos proyectos nuevos, la elección por defecto. No por moda, sino por eficacia.

Oracle, MySQL y SQL Server: viejos reyes, nuevos entornos

Oracle sigue el primero, como lleva años. No porque haya ganado popularidad, sino porque sigue incrustado en el ADN de la empresa clásica: banca, seguros, administración pública. Sí, cuesta, pero funciona. Y nadie quiere reescribir 200 procedimientos PL/SQL con dependencias cruzadas.

MySQL pierde más de 110 puntos en un año. Lo usan millones, pero ya no es el chico cool de la fiesta. El stack web se ha fragmentado, y muchos han migrado a PostgreSQL o soluciones más específicas.

SQL Server, por su parte, mantiene el tercer puesto, pero ha perdido más de 60 puntos interanualmente. No es que haya desaparecido, pero la conversación pública se ha desplazado a otras plataformas. SQL Server sigue siendo caballo de batalla en empresas medianas y grandes, especialmente en entornos on-prem y Azure híbrido, donde la integración con Active Directory, SSIS, SSRS y otros clásicos de la casa siguen marcando la pauta.

Eso sí, atención a lo que viene, SQL Server 2025 está ya en preview y apunta maneras. Entre las novedades: mejoras notables en rendimiento, seguridad y compatibilidad híbrida con Azure Arc. También hay nuevos mecanismos de optimización automática, mejoras para entornos con alto volumen de transacciones y más integración con servicios de inteligencia artificial. Aún es pronto para saber si estas mejoras se traducirán en una remontada en el ranking, pero no sería raro que en 2026 viésemos un repunte de visibilidad técnica si la preview convence y la migración se acelera.

MongoDB: menos moda, más estabilidad

MongoDB cae en puntuación, pero sigue como NoSQL más alto. ¿Qué ha pasado? Básicamente, ha dejado de ser “la novedad”. Se ha convertido en una opción seria y estable, y eso le resta ruido en redes. Además, la competencia le viene desde dos frentes: PostgreSQL con JSONB y servicios documentales específicos en cloud (tipo Cosmos DB o DocumentDB).

¿Se sigue usando? Mucho. Pero ya no está en el centro de las conversaciones de arquitectos. Eso sí, en microservicios y aplicaciones event-driven, sigue encajando como un guante.

El ascenso silencioso: Snowflake, Databricks y BigQuery

Aquí es donde empieza el capítulo “analítica en cloud”. Snowflake sube casi 43 puntos en el año. Databricks, más de 31. BigQuery, casi 10. El patrón es claro: DWH y lakehouse se están moviendo a plataformas gestionadas con elasticidad real, integración con IA y modelos de costes más modernos (aunque no siempre más bajos, según el uso).

¿Lo mejor? Que estos motores no están pensados para sustituir tu base OLTP. Vienen a resolver el otro gran problema: consolidar, transformar y explotar datos a gran escala sin montar un zoo de clusters on-prem.

Redis, Cassandra y DynamoDB: NoSQL donde toca

Redis baja levemente, pero sigue siendo imprescindible. Si no lo usas para caché o colas, es probable que tengas un cuello de botella innecesario en tu arquitectura.

Cassandra sube 11 puntos. Sigue sin estar de moda, pero es uno de los pocos motores que realmente escala linealmente sin pedir milagros al throughput del disco.

DynamoDB sube más de 14 puntos. Beneficiado por el lock-in positivo de AWS: si ya estás allí, y quieres serverless con rendimiento decente y costes predecibles, Dynamo es un candidato serio. El patrón es el mismo: NoSQL para lo que NoSQL hace bien.

El nicho útil: Neo4j y los grafos

Neo4j entra en el Top-20 y sube más de 10 puntos. No porque todo el mundo esté modelando grafos, sino porque hay más fraude que nunca, más recomendaciones que nunca y más necesidad de trazabilidad que nunca.

Eso sí, sigue siendo un nicho. No vas a modelar una tienda online en grafo. Pero cuando lo necesitas, no hay sustituto.

Embebido: SQLite 

SQLite sube 7 puntos y se mantiene como el motor más invisible y más desplegado del planeta. Está en móviles, navegadores, apps de escritorio… y nadie habla de él. Pero sin él, medio mundo digital colapsaría.

Esto es importante, SQLite es, con diferencia, la base de datos más desplegada del planeta: está en cada móvil Android o iOS, en navegadores, en aplicaciones de escritorio, en coches, en televisores… Es omnipresente y nadie la instala conscientemente. Justo por eso, no aparece en tantos foros, ofertas de trabajo o notas de prensa, y DB-Engines se alimenta de esas señales.

Como SQLite es un motor embebido que funciona en segundo plano y rara vez se administra “como producto”, no genera ruido mediático. Nadie abre un hilo en Stack Overflow con “ayuda, tengo problemas de clúster con SQLite” porque… no hay clúster. Tampoco ves ofertas de trabajo “Buscamos experto senior en SQLite”. Y eso, para DB-Engines, cuenta como “menos popularidad”.

El gran olvidado: Access

Microsoft Access cae (otra vez), pero sigue en el ranking. Y con razón. No diremos nombres, pero todos conocemos una pyme, una universidad o incluso una gran empresa que tiene un .mdb dando soporte a algo que “no se puede tocar hasta que Juan vuelva de vacaciones”. Lo gracioso (o lo trágico, según el día) es que ese Access suele seguir funcionando. Sin actualizaciones automáticas, sin tests, sin pipeline CI/CD… pero ahí está, cumpliendo su papel.

Access tiene una base fiel que lo sigue defendiendo con uñas, dientes y formularios incrustados. Y aunque en muchos casos sería razonable migrar a soluciones más modernas, también hay que reconocer que para cierto tipo de aplicaciones de backoffice, gestión interna o pequeños procesos departamentales, Access fue (y sigue siendo) una navaja suiza. Desactualizada, sí. Limitada, también. Pero a veces suficiente, y eso es más de lo que pueden decir muchos proyectos en la nube con dashboards que fallan cada martes.

Así que sí, sigue cayendo en popularidad… pero no desaparecerá del todo. Y mientras existan ficheros compartidos en una unidad de red llamada \\SERVIDOR-CONTABILIDAD, Access seguirá teniendo un rincón en el ecosistema.

Elasticsearch y Splunk: ¿fin del hype?

Elasticsearch pierde 15 puntos, Splunk 26. El mensaje es claro: la observabilidad está cambiando de cara. Los costes y la complejidad de estas plataformas están siendo desafiados por soluciones cloud nativas, integración con Prometheus, OpenTelemetry, e incluso por modelos de pago más flexibles. Nadie discute su valor técnico, pero ya no son los únicos en la mesa.

¿Qué se puede inferir del informe?

Lo más claro es lo que ya hemos comentado, lo relacional sigue siendo el corazón de la arquitectura de datos. Incluso en entornos modernos, la consistencia, las transacciones y el SQL siguen siendo el pegamento. NoSQL no ha sustituido a nada, simplemente se ha acoplado a lo que le toca.

El desarrollo cloud y la analítica moderna están redefiniendo qué es “popular”, pero los fundamentos no han cambiado. Quien sepa SQL, entienda particiones, y sepa modelar bien, sigue siendo indispensable.

PostgreSQL es la opción sensata si no quieres venderle tu alma a ningún proveedor, y Snowflake, BigQuery o Databricks son opciones serias para analítica avanzada si el Excel se te queda corto (o si necesitas procesar terabytes en vez de fórmulas con SI(CONJUNTO)).

¿Y en España?

No hay datos locales de DB‑Engines, pero los que trabajamos aquí lo sabemos: mucho Oracle y SQL Server en el tejido empresarial clásico, bastante MySQL en web, y cada vez más PostgreSQL en nuevas implantaciones. Y sí, cuando hay presupuesto, Snowflake o BigQuery asoman la cabeza en los RFP de analítica.

Las startups se mueven con PostgreSQL + Redis + alguna solución cloud para IA o analítica. Las grandes, con Oracle + DWH en cloud y Access escondido en una carpeta llamada “no tocar”.

Conclusión

Puedes mirar el ranking todas las semanas, pero si no entiendes qué papel juega cada tecnología en tu stack, no sirve de nada. Las modas cambian, pero las bases siguen siendo las mismas: consistencia, rendimiento, escalabilidad y coste. Y sí, elegir mal la base de datos sigue siendo una forma rápida de complicarte la vida durante años.

Así que, como siempre, elige con criterio técnico, no con pulsaciones de Twitter. Y si estás pensando en migrar algo solo porque “PostgreSQL lo está petando”, más vale que tengas buenos motivos, y no solo un gráfico bonito. Porque lo único más peligroso que una mala arquitectura… es una moda mal entendida.

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 Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima! 

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

¿Cuál es el coste de no optimizar SQL?

La mayoría de las empresas que trabajan con SQL Server no tienen ni la más remota idea de lo que les cuesta no optimizar sus consultas. Y no, no hablo de la típica pérdida de rendimiento que molesta al usuario de vez en cuando. Hablo de dinero. Del que se escapa cada mes por la rendija del servidor porque nadie se molestó en revisar ese SELECT con JOIN cruzado que parece escrito por un algoritmo con ganas de venganza.

Pero vamos por partes. Porque el drama tiene capítulos, y todos salen caros.

Hardware: más coste para hacer lo mismo (o menos)

Cuando una consulta no está optimizada, lo primero que pide el sistema es más CPU. Más RAM. Más disco. Y como somos humanos, y a veces un poco vagos, el primer impulso es escalar verticalmente: poner más hierro. Total, si ya funciona mal, con más recursos irá mejor, ¿no?

Pues sí. Durante un rato. Luego viene otra consulta igual de mala y vuelta a empezar. El patrón es de sobra conocido: base de datos lenta, compras hardware, mejora temporal, vuelve la lentitud, compras más hardware… y cuando te das cuenta, estás alimentando un monstruo que vive de cores, GB y licencias.

Y aquí entra la broma que siempre duele: SQL Server se licencia por core. Así que cada vez que decides “arreglar” un problema de rendimiento añadiendo CPU, estás aceptando voluntariamente pagar más en licencias, que no son baratas. Es como combatir la sed bebiendo agua salada: parece que ayuda, pero en realidad te estás hundiendo más.

Logo SoyDBA

Únete a la newsletter de SoyDBA

Regístrate gratis para no perderte ninguna novedad. Te avisaré de noticias y eventos importantes

¡No hacemos spam! Lee nuestra política de privacidad para obtener más información.

El coste real en la nube: «elástico», sí, pero hacia arriba

Muchos creen que al migrar a la nube el problema desaparece. Que Azure SQL, AWS RDS o cualquier plataforma PaaS mágica va a solucionar lo que tu SELECT * no quiso arreglar. Y no, no es así.

En la nube todo se factura. Cada milisegundo de CPU, cada MB de RAM, cada GB de almacenamiento y cada IO de disco. Una consulta ineficiente en Azure no solo es lenta: es cara. Muy cara. Porque, a diferencia de tu servidor físico en el CPD, aquí no tienes un coste hundido. Aquí cada operación se convierte en un apunte contable. Y si te pasas, la factura no perdona.

He visto clientes triplicar su consumo mensual de Azure SQL sin añadir ni un solo usuario más. ¿La causa? Un informe mal diseñado, una vista que arrastra medio millón de registros y un desarrollador con más entusiasmo que criterio.

Una historia real de coste en azure

Y luego están los casos como este. Años atrás, un cliente me llamó porque su Azure SQL Managed Instance con 8 cores (unos 1.355€ al mes) tenía la CPU por encima del 90% casi todo el día, con picos constantes al 100% que parecían avisos de incendio. Lo más grave no era eso, sino que ya habían asumido que la única salida era duplicar recursos y pasar a 16 cores, lo que dispararía la factura a 2.700€/mes. Antes de firmar el salto, decidieron llamarme. Por suerte.

Lo que me encontré era un festival del despropósito. Ni un solo índice clustered, todos los índices nonclustered eran de una sola columna y, por supuesto, sin INCLUDE. Mirando el uso, el 95% de esos índices no se usaban. Y claro, la DMV de índices faltantes parecía la lista de tareas de un becario sin supervisión: infinita, desordenada y sin lógica.

Con un par de días de trabajo serio (revisión de patrones de consulta y una política de indexación con sentido común) no solo evitamos el escalado, sino que redujimos la instancia a 4 cores. El resultado fue sorprendente, CPU estable al 30% incluso en horas pico. Lo que se dice, respirar. Pero además, más de 25.000€ al año de ahorro respecto a la solución que estaban a punto de contratar.

El coste del “Pero si se lanza una vez al año…”

Ya que me he puesto en plan cuentacuentos, déjame contarte otra de esas anécdotas que se graban a fuego.

Un día me encontré con un informe, hecho en Tableau (pero eso es lo de menos), que lanzaban una vez al año y que tardaba en completarse… 22 horas. Bueno, yo lo pillé cuando llevaba 22 horas de ejecución en el SQL Server de producción, a saber cuánto más le quedaba. Cuando lo comenté, me dijeron que no pasaba nada, que solo se lanzaba una vez al año y que solían dejarlo corriendo de un día para otro, como quien pone la olla lenta con garbanzos.

Pero yo lo vi claro. La consulta tenía 47 subconsultas en el SELECT. Si, si, CUARENTA Y SIETE. No índices raros, no estructuras marcianas, solo una estructura de consulta absurda.

¿El cambio? Reescribir con LEFT JOIN bien definidos en lugar de esas subconsultas incrustadas. Nada más. Bueno si, una subconsulta que se repetía bastantes veces muy parecida se persistió como temporal al inicio del proceso. De esa manera los datos se leian y filtraban de una tabla grande una sola vez y se quedaban en una tabla pequeña para consultar el resto de las veces. Pero nada más, ni cambiar índices, ni tocar el esquema. Vamos, sin reformar la casa. ¿El resultado? Menos de 20 milisegundos.

Y esto amigos, esto no es una mejora. Eso es pasar de enviar la consulta en burro a ponerle un cohete. Y no exagero.

Porque no todo el coste es culpa del desarrollador

No vamos a demonizar. Todos hemos escrito consultas que después nos dieron vergüenza ajena. Y sí, hay veces que las prisas, las entregas y los deadlines te llevan a empalmar un par de subconsultas “de emergencia” con un UNION sin ALL y a mirar para otro lado.

Pero eso no justifica dejar ese código en producción durante años como si fuera parte del mobiliario. Porque esa consulta, aunque solo se ejecute una vez al día, puede ser la responsable de saturar el servidor, disparar el DTU en Azure o arrastrar a otras aplicaciones con ella.

Aquí entra en juego lo que me gusta llamar “el coste invisible de la desidia técnica”. No se ve, no se presupuesta, pero se paga igual. En horas de soporte, en tiempo perdido, en usuarios frustrados, en reputación quemada.

De 10 minutos a 2 milisegundos (sin efectos especiales)

Otra historia real, por si alguien aún cree que exagero.

Me llama un cliente porque un proceso tarda más de 10 minutos. Revisamos el plan de ejecución y canta como un tenor: falta un índice. Literalmente lo está pidiendo a gritos. Un Clustered Index Scan sobre una tabla de 10 millones de registros con 5 campos varchar(max).

Creamos un índice sencillo sobre los dos campos que busca… y bajamos a 20 segundos. Bien, ¿no?

Pero no me conformé. Me di cuenta de que esos campos varchar(max) apenas se usaban y propuse moverlos a otra tabla. Un cambio mínimo de esquema, sin traumas. El resultado: la consulta se resuelve ahora en 2 milisegundos.

Sí, de más de diez minutos a dos milisegundos. Sin comprar licencias, sin añadir cores, sin tirar la casa por la ventana. Solo sentido común.

Consultas eficientes, bases de datos rentables

Optimizar una consulta no es hacer magia negra ni sacrificar cabras sobre el plan de ejecución. Es técnica, análisis y experiencia. A veces basta con añadir un índice. O con quitar un SELECT * y poner solo las columnas que necesitas. O con evitar ese cursor que llevas arrastrando desde hace 10 años como si fuera un trauma sin resolver.

Una consulta optimizada no sólo corre más rápido. Consume menos CPU. Bloquea menos. Permite que más usuarios trabajen al mismo tiempo. Y, lo más importante, reduce directamente tu coste de infraestructura y licenciamiento.

No es filosofía, son matemáticas puras, si una consulta tarda 500 ms y logra pasar a 50 ms, puedes hacer 10 veces más operaciones con los mismos recursos. ¿Te imaginas que tu equipo hiciera 10 veces más tareas al mismo sueldo? Eso es lo que hace una base de datos bien afinada.

El coste del «si funciona, no lo toques»

Una de las excusas más repetidas cuando se habla de optimizar es: “Pero si ya funciona, ¿para qué meternos ahí?” Pues por eso mismo. Porque ahora va, pero mal. Y cada día que pasa, cada usuario que se conecta, cada nuevo informe que se genera, lo hace un poco peor.

La deuda técnica no caduca. Se acumula. Y cuando salta, no lo hace con un error bonito y fácil de arreglar. Lo hace con un rendimiento desastroso en el peor momento: justo antes del cierre contable, durante el Black Friday o cuando el CEO quiere ver “cómo va todo” desde Power BI (todo casos reales).

Si optimizar parece caro, espera a ver cuánto cuesta no hacerlo.

Formación, experiencia y algo de mala leche

Sí, optimizar lleva tiempo. Requiere saber leer planes de ejecución, entender estadísticas, conocer cómo SQL Server decide qué estrategia usar y cuándo. Pero también requiere actitud. Ganas de escarbar. De no conformarse con que funcione “más o menos”.

Y eso, lamentablemente, no lo da ningún botón mágico ni el asistente del Management Studio. Hay que aprenderlo. O contratar a alguien que lo sepa.

Aquí es donde entra mi parte, claro. No solo como autor de este blog, sino también como consultor. Llevo más de 12 años viendo barbaridades que harían llorar al optimizador de consultas. Y ayudando a equipos a entender por qué sus bases de datos son lentas, y cómo hacer que dejen de serlo sin hipotecar la nube ni sacrificar fines de semana enteros en tareas de mantenimiento que no deberían existir.

Y sí, estoy escribiendo un libro

Mi libro se va a llamar “SQL SERVER: La NO guía práctica de optimización”. Y no será el típico tocho con recetas milagrosas genéricas que nadie es capaz de aplicar en producción. Será un manual honesto, directo y realista. Uno que explica cómo optimizar sin morir en el intento, desde la base y comprendiendo el funcionamiento interno del motor de base de datos. Porque ya tenemos demasiadas presentaciones bonitas que no dicen nada.

Y sí, también haré formación. Y talleres. Y sesiones donde, si hace falta, nos peleamos con los planes de ejecución hasta que canten. Porque se puede. Porque debe hacerse. Y porque seguir pagando licencias por no optimizar… simplemente no tiene sentido.

¿Quieres dejar de pagar por no saber? Hablemos.

Si después de leer esto has pensado en esa consulta que lleva años sin tocar, en ese informe que tarda 12 minutos, o en ese servidor que cada semana pide más cores como si fueran cromos… ya sabes lo que hay.

Puedes seguir ignorándolo, puedes aprender cómo optimizar SQL Server o puedes llamarme y lo miramos juntos.

Tu factura lo va a notar.

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

¿Trabajar 15 horas (o menos) a la semana como DBA? Depende del tipo de DBA que seas

Hace poco, Brent Ozar publicó un artículo comentando una conversación en Reddit que planteaba una pregunta tan ingenua como recurrente: ¿de verdad hay DBAs cobrando un pastizal por trabajar 15 horas a la semana mientras el resto del tiempo ven vídeos o están “de guardia”?

Spoiler: sí, pero no es lo habitual, ni llega de la nada, ni cualquiera puede aspirar a eso. El artículo analiza muy bien los matices detrás de ese escenario, y ya que yo llevo más de una década trabajando con SQL Server, quiero aportar mi perspectiva sobre cómo se vive esto aquí. Porque el contexto importa, y mucho.

DBA de Infraestructura vs DBA de optimización

En el mercado español, y esto lo digo por experiencia directa, los perfiles DBA suelen dividirse claramente entre los que se encargan de la infraestructura y los que nos centramos en la optimización. Los primeros están más cerca del mundo sysadmin: alta disponibilidad, backups, parches, clústeres, automatización de tareas rutinarias. Los segundos vivimos más pegados al código: tuning de queries, revisión de planes de ejecución, diseño de índices y control del rendimiento.

Ahora bien, los que realmente marcamos la diferencia somos los que hemos aprendido a movernos en ambos mundos. Ese es el perfil que he desarrollado con los años y al que creo que todos deberíamos aspirar. No tiene sentido saber montar un AG perfecto si luego no detectas un SELECT * a pelo en una tabla de 300 millones de filas. Y viceversa.

El entorno lo define todo: DBA interno vs. DBA externalizado

Otra diferencia clave, y que marca el tipo de trabajo que hacemos, es si estamos dentro de un cliente final o trabajamos en una consultora o equipo de soporte multicliente.

Yo he pasado por ambos mundos, y la diferencia es abismal. Cuando estás en cliente final, con un parque de servidores limitado (pongamos menos de 20), tienes margen para hacer las cosas bien. Puedes auditar el entorno, meter procesos de automatización, eliminar errores históricos y acabar interviniendo en decisiones de diseño. Incluso te conviertes en un filtro obligado antes de subir cambios a producción.

Después de ese primer año o dos de “puesta a punto”, el trabajo se estabiliza. Las incidencias bajan, los entornos están controlados y puedes dedicar tiempo a tareas de más valor. A veces, incluso, te conviertes en esa figura que aparece poco… pero cuando aparece, es por algo serio.

En cambio, cuando estás en un cliente grande o en una consultora gestionando cientos o miles de servidores, el enfoque cambia. Hay que actuar por patrones, automatizar a escala y asumir que no vas a conocer cada entorno al detalle. Te pasas más tiempo apagando fuegos que optimizando consultas. Lo urgente gana a lo importante, y profundizar se convierte en un lujo.

¿Y los desarrolladores que ejercen de DBA?

Aquí conviene puntualizar. Existen desarrolladores SQL que asumen funciones de DBA y lo hacen bien. He trabajado con varios y sé que hay perfiles muy sólidos que entienden el motor, cuidan el rendimiento, diseñan esquemas con criterio y se preocupan por el coste real de sus consultas.

Este artículo también va por ellos. Porque son, en esencia, parte del mismo ecosistema. Saben lo que hacen, aunque su tarjeta no ponga “DBA”.

Ahora bien, también todos hemos visto el otro extremo, equipos donde nadie tiene perfil de base de datos y se asume que “el que más sabe de SQL” llevará los servidores. En esos casos, se sobrevive como se puede. Backups por defecto (con suerte), configuraciones sin revisar y scripts de producción lanzados con los dedos cruzados.

No es raro ver scripts de mantenimiento programados en el Post-it Engine, versión papel pegado al monitor. Y la documentación vive, cómo no, en la bandeja de entrada de alguien que ya no está en la empresa.

No es raro, pero no es lo que nos interesa hoy. Aquí estamos hablando de roles expertos. De gente que sabe lo que es un latch y por qué TEMPDB puede ser un cuello de botella aunque no tenga muchos datos.

¿Trabajar 15 horas o menos a la semana como DBA? Sí, pero no como te imaginas

Lo que cuenta Brent sobre ese DBA que trabaja 15 horas a la semana o menos y el resto del tiempo está en “modo guardia” es perfectamente posible. Pero no es un privilegio aleatorio, ni una herencia. Es el resultado de años de trabajo bien hecho.

Yo he estado en esa posición. He tenido entornos donde, después de automatizar, revisar, auditar y consolidar, apenas había incidencias. Y cuando las había, las resolvía rápido. No porque tuviera suerte, sino porque conocía el entorno al detalle.

En esos escenarios, no estás “siempre productivo”. De hecho, a veces ni siquiera un 10% del tiempo. Pero cuando hay un problema, tu intervención marca la diferencia. No puedes dudar, no puedes consultar la documentación. Tienes que actuar con precisión y rapidez. Porque si tardas 30 minutos más de la cuenta, el sistema de ventas se cae, el almacén se para o la factura al cliente se multiplica por dos.

No estás al 100%. Ni falta que hace. Estás como los extintores: colgado en la pared, sin moverse, hasta que alguien grita y hay que actuar. Solo que tú sabes más de índices que de espuma.

Este tipo de puesto no es para cualquiera. Y desde luego, no es un trabajo cómodo. Es un rol de alta responsabilidad y alta exigencia, aunque no lo parezca desde fuera.

¿El rol del DBA está en peligro?

Llevamos años oyendo que el DBA está muerto. Que si la nube automatiza todo, que si los desarrolladores se bastan solos, que si la IA lo va a arreglar todo con cuatro sugerencias inteligentes.

La realidad es que el rol está cambiando, no desapareciendo. Los DBAs de infraestructura han tenido que evolucionar hacia entornos híbridos, servicios PaaS, IaC, automatización. Pero los problemas siguen existiendo, solo que tienen otro nombre.

Y los DBAs de optimización somos ahora más importantes que nunca. Especialmente en entornos cloud, donde cada milisegundo extra tiene un precio literal. Cuando un SELECT mal optimizado empieza a generar 30 euros por hora de DTUs, todo el mundo mira al DBA. No al desarrollador, no al arquitecto, no al jefe de proyecto. A nosotros.

DBA cada segundo cuenta

Las herramientas (de IA o no) que prometen optimizarlo todo aún están lejos de ser útiles, al menos sin intervención. Usamos Copilot, sí. Pero lo que da miedo no es lo que sugiere, sino que alguien lo acepte sin parpadear.

Copilot a veces acierta… como un reloj parado. Dos veces al día, da una respuesta aceptable. El problema es todo lo que sugiere entre medias.

Saber distinguir el buen consejo del disparate es, y seguirá siendo, trabajo nuestro.

Conclusión: menos horas, más impacto

Trabajar 15 horas a la semana o menos no significa trabajar poco. Significa haber llegado a un punto donde aportamos valor real justo cuando hace falta.

No estamos todo el día productivos. Pero cuando algo revienta, actuamos con decisión. Y eso solo se consigue con años de experiencia, conocimiento técnico profundo y sangre fría. Porque cada minuto cuenta cuando la producción está caída.

El puesto de DBA no está en peligro. Lo que está en peligro es seguir pensando que esto va de hacer backups y mirar gráficas. El futuro es de los que afinan, automatizan y cuando hay que actuar… no preguntan, resuelven. Y sí, puede parecer que no hacemos mucho. Pero cuando hacemos, salvamos el día, la semana y la cuenta de resultados de la empresa. Y eso vale más que cualquier KPI de los Project Manager.

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

Azure MI Failover Group vs SQL Server Always On

Hablar de alta disponibilidad en entornos SQL Server es como entrar en un congreso de arquitectos y preguntar por el hormigón armado: todo el mundo tiene una opinión, pero no todos entienden lo que hace que no se les caiga el edificio. Desde que apareció Azure SQL Managed Instance, muchos han querido comparar su Failover Group con el clásico y reputado Always On Availability Groups (AO AG) de SQL Server. Spoiler: no son lo mismo. Ni en arquitectura, ni en control, ni en flexibilidad. Y por mucho que Microsoft los presente como soluciones “equivalentes” en diferentes contextos, la verdad está en los detalles. Ahí donde el marketing calla y el diagrama de red grita.

¿Qué es un Failover Group en Azure SQL Managed Instance?

El Failover Group (FOG, para los amigos) en Managed Instance es un servicio de Azure PaaS que nos permite tener una réplica automática en otra región, con conmutación por error (failover) automática o manual. No hay que gestionar clústeres, ni certificados, ni configurar endpoints: todo se cocina dentro de la infraestructura de Azure. ¿Ventajas? Sencillez. ¿Limitaciones? También las hay, pero menos de lo que algunos creen.

El Failover Group actúa a nivel de instancia. Replica automáticamente todas las bases de datos del grupo seleccionado, manteniendo sincronización asincrónica entre regiones. Y aunque históricamente tenía fama de ser unidireccional y sin opciones de lectura secundaria, eso ya no es cierto: podemos habilitar acceso de solo lectura a la réplica secundaria a través del listener. Eso sí, solo una réplica, y nada de topologías a medida. Pero para muchos escenarios de DR, es más que suficiente.

¿Y qué hace SQL Server con su Always On Availability Groups?

Aquí volvemos al SQL Server clásico, el de verdad, el que instalamos en máquinas (físicas o virtuales), con clústeres de Windows, certificados, endpoints, y todo lo que da gusto configurar a las tres de la mañana cuando algo falla. El AO AG es un modelo de alta disponibilidad y recuperación ante desastres (HA/DR) basado en grupos de disponibilidad, con réplicas sincronizadas (para HA) y asincrónicas (para DR). Admite múltiples réplicas, balanceo de lectura, conmutación automática o manual, y una flexibilidad que muchos aún no saben que están mal usando.

¿Requiere trabajo? Mucho. ¿Te da control absoluto? También. Y eso, en infraestructuras exigentes, marca la diferencia entre diseñar alta disponibilidad y simplemente esperar que Azure haga lo suyo.

Diferencias técnicas clave

Aquí es donde empieza lo interesante. El Failover Group en MI está limitado por diseño: solo una réplica secundaria, sincronización asincrónica entre regiones y sin opción a topologías complejas. Pero lo compensa con gestión simplificada, y sí, un listener que permite direccionar tráfico de lectura y escritura de forma bastante transparente. El parámetro ApplicationIntent=ReadOnly funciona como esperamos, siempre que tengamos configurado el grupo correctamente.

AO AG, por su parte, permite hasta ocho réplicas, elegir sincronización o asincronía según la necesidad, distribuir la carga de lectura, gestionar failover policies con precisión quirúrgica y hasta usar clusterless AGs para entornos que no necesitan HA pero sí replicación. También nos permite ajustar los parámetros internos de cada réplica, implementar scripts personalizados ante fallos y mantener una visibilidad completa del estado del clúster.

La diferencia crítica sigue siendo el acceso al entorno. En SQL Server AO AG tienes control del sistema operativo, del almacenamiento, de la red y del motor de base de datos en sí. En Managed Instance estás dentro de una caja cerrada: puedes administrar lo que te dejan, y cuando algo se rompe, dependes completamente del soporte de Azure. Que sí, son majos. Pero a veces el SLA no consuela cuando tienes al CTO respirando en la nuca.

Ventajas y limitaciones prácticas

El Failover Group de Azure Managed Instance es ideal para quienes quieren alta disponibilidad sin complicaciones, sin pelearse con Windows Server Failover Clustering, sin pensar en discos compartidos ni quorum. Y con la posibilidad de lectura secundaria, gana puntos en escenarios de DR que también exigen analítica o reporting en caliente.

AO AG, por su parte, permite arquitecturas híbridas, complejas y a medida. Pero requiere un nivel de experiencia y de mantenimiento que no todos los equipos pueden asumir. No es para todos, pero en manos expertas es una bestia formidable. Eso sí, como toda bestia, necesita cuidado constante y algo de cariño (o miedo). Cuidado con meterte en esta solución tan compleja si tu equipo no está preparado o tendrás el caldo de cultivo perfecto para un problema grave.

¿Qué debemos elegir para nuestro entorno?

La decisión real no es entre Failover Group y Always On, sino entre PaaS y IaaS (o on-premises). Si tu equipo no puede o no quiere gestionar infraestructura, el Failover Group en Azure MI es una solución más que decente. Pero si necesitas múltiples réplicas, balanceo de lectura avanzado, configuración personalizada o integración con entornos complejos… entonces AO AG sigue siendo la referencia.

También hay que mirar la criticidad del sistema. ¿Puedes tolerar unos minutos de pérdida de servicio mientras Azure detecta y conmuta? ¿O necesitas failover inmediato y con cero pérdida de datos? El RPO y RTO no son iguales, y en algunos casos eso marca la diferencia entre continuidad del negocio y justificación al comité de crisis.

Los precios de ambas soluciones también son decisivos, en Azure Managed Instance tienes que pagar todos los meses depende del tamaño de tu servidor y eso a la larga puede salir caro. Always On, por su parte, no se queda corto ya que vas a necesitar licencias SQL Server Enterprise y, eso no es barato precisamente.

Casos reales y decisiones que duelen

Recientemente, en un proyecto de consultoría, el cliente tenía que mover un entorno crítico de Always On a Azure MI. Las restricciones del Failover Group se hicieron evidentes al tercer día, cuando se dieron cuenta de que no podían controlar la latencia ni ajustar parámetros finos de sincronización. ¿Solución? Replantear parte de la arquitectura y asumir limitaciones. ¿Resultado? Un entorno funcional, sí, pero menos flexible. Y con la sensación de haber pasado de un Fórmula 1 a un coche automático: cómodo, sí. Pero que no te deja cambiar de marcha cuando más lo necesitas.

Conclusión

Failover Group en Azure MI no es el sucesor espiritual de Always On. Es una solución distinta, pensada para escenarios distintos. Si necesitas control, flexibilidad y múltiples réplicas, Always On sigue siendo el rey. Si priorizas simplicidad y mantenimiento mínimo, Failover Group cumple su papel. Y ahora, con acceso de lectura en la réplica secundaria, es más potente de lo que muchos creen.

Pero no confundamos comodidad con equivalencia. Porque cuando llegue el fallo, lo que importa no es la tecnología, sino cómo responde. Y en ese momento, más vale haber elegido bien. ¿Quieres alta disponibilidad sin sustos? Elige con cabeza, no con prisas. Porque lo único peor que una base de datos caída… es una mal diseñada que no sabe caer.

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

¿Es PLE un buen indicador de rendimiento de SQL Server?

Durante años, el Page Life Expectancy (PLE) ha sido una de esas métricas que aparecen en los scripts de monitorización como si fueran mantras sagrados. Una de esas columnas que se miran con recelo, que hacen saltar alertas y que, para algunos, justifican peticiones de más memoria RAM con la ligereza con la que se pide café. Pero como todo en SQL Server, nada es tan sencillo como parece y el PLE, aunque útil, tiene trampa.

¿Qué demonios es el PLE?

El PLE representa cuántos segundos, de media, una página de datos puede permanecer en el buffer pool antes de ser desalojada. Es decir, mide cuánto tiempo vive la información en memoria antes de que SQL Server tenga que expulsarla para hacer sitio a otra. Técnicamente, es un contador de rendimiento (sys.dm_os_performance_counters) que se encuentra dentro de Buffer Manager.

Cuando este valor es alto, respiramos tranquilos: significa que las páginas permanecen en memoria lo suficiente, probablemente porque tenemos un buffer pool holgado y un acceso a disco relajado. Cuando cae en picado, suele ser síntoma de presión de memoria o de lecturas físicas excesivas, muchas veces provocadas por planes de ejecución poco afortunados.

Ahora bien, el número mágico de 300 segundos (5 minutos) que algunos siguen usando como umbral es tan fiable como usar una brújula en mitad de un campo magnético. Ese valor tenía sentido… cuando los servidores venían con 4 GB de RAM. Hoy, con instancias que superan los 512 GB, seguir usando el mismo umbral es como usar una regla de colegio para medir una autopista.

Valores PLE deseables: ¿hay alguno?

Aquí viene la gran pregunta que a su vez es el gran problema del PLE: su valor es absolutamente relativo. Depende del tamaño del buffer pool, del patrón de carga de trabajo, de los tipos de queries que se estén ejecutando, y de si el sistema ha tenido un pico puntual de actividad.

Una instancia con 256 GB de RAM debería tener un PLE mucho más alto que una con 16 GB. ¿Cuánto más? No hay una cifra mágica, pero una orientación razonable sería multiplicar los segundos base (300 en los viejos tiempos) por un factor en relación al tamaño del buffer pool. O mejor aún, establecer una línea base propia de nuestra carga habitual y monitorizar desviaciones.

Porque eso es lo que importa: no tanto si el PLE es 2.000 o 20.000, sino si ha caído bruscamente respecto a lo normal. Un descenso repentino suele estar vinculado a algo que no encaja: una query que hace lecturas absurdas, un mantenimiento mal planteado, o simplemente un usuario que ha decidido escanear toda la tabla de movimientos de 200 millones de registros “por si acaso”.

El PLE no es una medida mágica

Muchos lo tratan como si fuera el santo grial de la salud del servidor, pero en realidad el PLE no mide nada en términos de experiencia de usuario. Es un indicador indirecto de presión de memoria, no una medida de rendimiento ni de latencia. Puede estar alto mientras el sistema responde lento, o estar bajo y aun así tener una experiencia fluida si las queries están bien cacheadas.

Además, el PLE es un promedio a nivel de NUMA node, lo que significa que puede estar sesgado si tenemos un servidor con múltiples nodos y la presión se concentra solo en uno de ellos. SQL Server calcula un PLE por cada nodo NUMA, pero los scripts que aglutinan el valor total no siempre lo desglosan correctamente. De ahí que convenga analizarlo por nodo para tener una visión clara.

Y por si fuera poco, el PLE se resetea con cada reinicio de la instancia. Así que no, si ves un valor bajo justo después de un restart, no es el fin del mundo: es simplemente lo que hay.

Detractores: con razón, no por moda

Los que critican el PLE no lo hacen por capricho. Lo hacen porque, en muchos entornos, mirar el PLE sin contexto lleva a diagnósticos erróneos y decisiones equivocadas. Se han visto DBAs pidiendo 128 GB de RAM más “porque el PLE está bajo”, sin pararse a mirar que el problema era una consulta sin WHERE que se colaba a producción cada viernes a las 15:00.

El PLE tampoco distingue entre lecturas necesarias y lecturas absurdas. Si haces un SELECT * de una tabla de logs históricos porque alguien quiere exportarla a Excel “por si acaso”, el PLE caerá en picado igual que si tuvieras una mala estrategia de índices. Así que usarlo como medida absoluta de salud es, como poco, ingenuo.

Alternativas: mirar más allá del PLE

Si queremos una visión más rica, hay vida más allá del PLE. Podemos observar métricas como el Buffer Cache Hit Ratio, aunque también con cautela, porque este valor suele estar cerca del 100% en casi todas las instancias modernas y no siempre significa lo que creemos. Lo que realmente nos interesa es entender qué queries están provocando lecturas físicas excesivas.

Aquí entra en juego la DMV sys.dm_exec_query_stats, que combinado con sys.dm_exec_sql_text y sys.dm_exec_query_plan, nos puede dar visibilidad sobre qué consultas están provocando lecturas físicas o lógicas desproporcionadas. También podemos revisar el sys.dm_io_virtual_file_stats para analizar el I/O por base de datos y archivo. 

Y si lo que nos interesa es el uso de memoria, el sys.dm_os_memory_clerks y el sys.dm_os_buffer_descriptors ofrecen información mucho más granular sobre cómo SQL Server está usando realmente la RAM.

Además, a partir de SQL server 2025 tendremos la nueva DMV sys.dm_os_memory_health_history pero eso da para otro artículo.

En resumen: el PLE puede servirnos como un primer vistazo, como ese canario en la mina que nos avisa de que algo pasa. Pero confiar ciegamente en él es como juzgar un libro por el grosor del lomo.

Monitorizar el PLE: ¿sí o no?

Entonces, ¿monitorizamos el PLE o no? Esta es una de esas preguntas que genera debates infinitos y respuestas del tipo “depende”. Yo voy a ser neutral, no voy a entrar en la trinchera de los que lo consideran inútil ni en la de los que lo elevan al nivel de oráculo. Lo que sí diré es que monitorizar el PLE puede tener sentido si sabemos lo que estamos mirando y no nos dejamos llevar por interpretaciones simplistas.

Si tenemos una línea base sólida, si entendemos la arquitectura NUMA de nuestra instancia y si usamos el PLE como un indicador más dentro de un conjunto más amplio de métricas, entonces puede ser útil. Pero si lo usamos como termómetro único del rendimiento, vamos a acabar medicando al paciente por fiebre sin saber que tiene apendicitis.

Conclusión

El Page Life Expectancy no está muerto, pero tampoco es un mesías. Es una métrica con contexto, con historia y con limitaciones. Sirve para levantar sospechas, no para dictar sentencias. Hay que leerlo con ojo clínico, entender lo que implica y, sobre todo, combinarlo con otras métricas más modernas y más específicas.

Como siempre, no hay atajos. Lo que hay es análisis, observación y un poco de sentido común. Que no es mucho pedir… salvo que creas que SELECT * sigue siendo buena idea.

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 Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

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

CPU NUMA: Cuando el procesador también tiene barrios

Hay palabras que, al oírlas, nos ponen en guardia. “NUMA” es una de ellas. No porque suene peligrosa, sino porque suele venir envuelta en conceptos vagos y soluciones mágicas a problemas que no entendemos del todo. Pero no nos engañemos: si administramos SQL Server sobre hardware serio (y no sobre portátiles reciclados con Docker “porque mola”), entender cómo se comporta la arquitectura NUMA no es opcional. Es imprescindible.

¿Qué es NUMA? Una ciudad con barrios.

NUMA (Non-Uniform Memory Access) es una arquitectura de memoria en la que cada CPU (o grupo de CPUs) tiene acceso preferente a un bloque de memoria. A este conjunto se le llama nodo NUMA. Sí, se puede acceder a la memoria de otros nodos, pero es más lento. Y en un mundo donde las latencias de microsegundos importan más que los deadlines de los Project Managers, eso no es un detalle menor.

Puede parecer lioso pero vamos a verlo en una imagen para que no haya dudas. Realmente todo esto no es algo abstracto, viene directamente definido a nivel hardware. Las placas base de los servidores tienen varios socket de procesadores y, cada uno de ellos, tiene unos slots de RAM más cercanos a los que accede con menor latencia.

Aquí, por ejemplo, vemos dos sockets físicos, cada uno con 8 núcleos y 128 GB de RAM. Cada socket está conectado a su propia porción de memoria. Esto es lo que llamamos una arquitectura NUMA: cada CPU accede más rápido a su “propia” memoria que a la del otro socket. Y sí, como os decía, un procesador puede acceder a la memoria del otro, pero con más latencia. Cómo cruzar la ciudad para ir al mercadona de otro barrio teniendo uno en el tuyo, se puede, pero no es lo ideal.

SQL Server es plenamente NUMA-aware desde hace muchas versiones. Y no es solo marketing. El motor entiende esta arquitectura y la usa para optimizar la asignación de memoria, la ejecución de tareas en paralelo y la gestión de schedulers. Todo esto siempre y cuando no le pongamos la zancadilla con configuraciones absurdas.

Planificación y schedulers: cómo SQL Server reparte el trabajo

Cada nodo NUMA tiene un conjunto de schedulers, que no son otra cosa que planificadores de hilos (threads). Para ser lo más eficiente posible, SQL Server intenta ejecutar los hilos en el mismo nodo donde se asignaron, y acceder a la memoria local del mismo. Si la información está bien distribuida, esto reduce el tráfico entre nodos y mejora la latencia general. Pero si metemos la pata, por ejemplo fijando la afinidad de forma manual y sin criterio, podemos forzar al motor a comportarse como un repartidor de pizzas desorientado: yendo de un barrio a otro sin sentido y perdiendo tiempo en cada esquina.

Además, cada instancia de SQL Server crea un grupo de trabajo por cada nodo NUMA visible. Y si usamos el modo de memoria comprimida, las decisiones de qué nodo usa qué buffer pool se vuelven aún más relevantes. Ignorar esto es como jugar al ajedrez sin mirar el tablero. Puede parecer divertido, pero termina mal.

El efecto de un mal diseño NUMA

Cuando un servidor tiene múltiples sockets físicos, es muy probable que cada socket represente un nodo NUMA. Pero algunos sistemas operativos y BIOS permiten desactivar o modificar esta topología. Resultado: servidores con 256 núcleos que se ven como un único nodo NUMA. ¿Y eso qué implica? Pues, para empezar, que SQL Server no puede distribuir sus schedulers de forma eficiente. El escalado se resiente, la contención de recursos aumenta y las consultas paralelas empiezan a hacer cosas raras.

¿Has visto alguna vez una consulta que parece ir más lenta cuanto más CPUs tiene disponibles? Bienvenido al infierno del mal NUMA. Y sí, hay admins que creen que poner más CPUs siempre mejora el rendimiento. También hay quien piensa que una tabla de log no necesita índices. Vivir para ver.

Las virtualizaciones y sus trampas con NUMA

Ah, la virtualización. Ese mundo donde puedes tener 64 vCPU repartidas en 2 nodos NUMA virtuales y no saber por qué tu SQL Server tiene el rendimiento de un 486 con resaca. Los hipervisores serios (como VMware, Hyper-V o, incluso, Proxmox) permiten configurar el número de nodos NUMA expuestos a la máquina virtual. Pero si dejas esto en manos de un “especialista” que nunca ha leído una página del “whitepaper de arquitectura NUMA en SQL Server” (sí, no solo existe, cada fabricante tiene uno propio), lo normal es que termines con un entorno virtualizado más caótico que una tabla sin clave primaria.

Por eso, cuando trabajamos con entornos virtualizados, conviene revisar cuidadosamente cómo están asignados los núcleos físicos, cuántos nodos NUMA ve la VM y cómo se está presentando la memoria. SQL Server lo detectará, pero no puede arreglar por sí solo una chapuza.

¿Y qué hay del NUMA en SQL Server en Azure?

Pues aquí el tema se vuelve más oscuro. Microsoft no publica (con detalle) la topología NUMA exacta de sus VMs, pero en general puedes asumir que, en las series más potentes, hay más de un nodo. Las VMs con más de 16 vCPU casi siempre están divididas en al menos dos nodos NUMA virtuales. ¿Cómo lo comprobamos? Ejecutando SELECT * FROM sys.dm_os_nodes y observando el campo memory_node_id. Si ves más de un nodo con memory_node_id distinto de 64 (el de DAC), estás en terreno NUMA.

Por tanto, cuando afinamos instancias en Azure, conviene monitorizar la distribución de la carga entre nodos. A veces, ciertas consultas intensivas pueden estar trabajando siempre sobre el mismo nodo, provocando un cuello de botella local mientras el resto del servidor está de paseo.

Configuraciones de NUMA recomendadas

Si el servidor tiene una topología NUMA bien definida, lo mejor que podemos hacer es dejar que SQL Server gestione sus schedulers y memoria. No toques la afinidad de CPU salvo que tengas un motivo muy claro. Y por favor, no uses MAXDOP sin entender cómo afecta a los nodos. Un mal MAXDOP puede anular por completo los beneficios de NUMA, provocando saltos de memoria y escalado ineficiente.

También hay que considerar Resource Governor, que puede fijar workloads a ciertos nodos, o las nuevas opciones de Soft-NUMA (a partir de SQL Server 2016), útiles cuando el hardware ofrece más núcleos por nodo de los que SQL Server gestiona de forma eficiente por defecto.

Y si alguien propone usar lock pages in memory sin revisar la topología NUMA antes, haceos un favor: quitadle los permisos.

Conclusión

NUMA no es un problema. Es una característica muy potente. Pero como toda característica avanzada, si no la entendemos puede convertirse en un dolor de cabeza. En entornos de producción con alta carga, especialmente con muchos núcleos y grandes volúmenes de memoria, ignorar NUMA es como hacer tuning con los ojos vendados.

La solución no es complicarse la vida configurando todo a mano sin necesidad, sino entender cómo se comporta SQL Server en nuestro entorno y dejar que optimice… siempre que el terreno no esté lleno de minas.

No lo digo yo, lo dice la ciencia.

Espero que este artículo te haya resultado útil e interesante. Si tienes alguna duda o comentario, no dudes en contactarnos en Twitter o por mail o dejarnos un mensaje en los comentarios de aquí abajo. Y recuerda que también tenemos un grupo de LinkedIn al que te puedes unir.

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

Azure Arc para SQL Server

Desde hace años, en cada evento, webinar o presentación de infraestructura de Microsoft se repite como un mantra: el futuro es híbrido. Y aunque muchos se limitan a asentir mientras piensan en cómo sobrevivir al próximo reinicio inesperado del servidor de producción, lo cierto es que algo de razón tienen. Especialmente cuando aparece una herramienta que, por una vez, parece estar pensada para los que aún tenemos servidores físicos, clústeres que no caben en una suscripción y dolores de cabeza por políticas de compliance que cambian más que los nombres de productos en Microsoft. Hablemos claro: Azure Arc para SQL Server on-premises no es la panacea, pero sí un paso sensato hacia un control centralizado sin obligarnos a renunciar al datacenter de toda la vida.

¿Qué demonios es Azure Arc (y por qué debería importarnos)?

Empecemos por el principio, ¿qué es Azure Arc? En resumen es la forma en que Microsoft intenta convencernos de que Azure no es solo «la nube», sino «la plataforma de gestión» para todos nuestros recursos, estén donde estén. Y eso incluye nuestros SQL Server instalados con sudor y lágrimas en máquinas físicas, clústeres locales o VM que jamás verán una IP pública.

Azure Arc extiende la gestión de Azure a recursos externos como servidores, Kubernetes, y por supuesto, SQL Server. Pero aquí viene la parte jugosa: Azure Arc para SQL Server no instala una nueva base de datos ni te obliga a migrar nada. Lo que hace es registrar tu instancia on-premises en Azure, otorgándole una especie de identidad en el portal.

Una vez enlazada, puedes aplicar políticas, ver inventario, tener visibilidad de cumplimiento de licencias (sí, esa parte duele), activar extensiones como Defender for SQL o habilitar seguimiento de seguridad desde el Azure Security Center. Todo sin tocar la base de datos. Bueno, casi.

Cómo funciona realmente Azure Arc (no la versión edulcorada del marketing)

Cuando conectamos una instancia de SQL Server a Azure Arc, lo que instalamos es un agente: el Azure Connected Machine Agent, junto con una extensión específica para SQL. Este agente se comunica con Azure a través de HTTPS, informa de configuraciones, recopila datos de diagnóstico y permite acciones remotas de configuración.

Para que funcione, necesitas tener SQL Server 2012 o superior, y una conexión de red desde el servidor hacia Internet (no hace falta conexión entrante, lo cual es un alivio). Lo ideal es tener SQL autenticado con Active Directory para poder controlar mejor el acceso, pero se puede hacer también con SQL Auth si quieres vivir al límite.

Una vez conectado, la instancia aparece en el portal de Azure como un recurso más. Desde ahí podemos aplicar políticas, revisar vulnerabilidades de seguridad, controlar el uso de features según la edición (lo cual es útil para evitar sorpresas desagradables con licencias), monitorizar comportamiento con Azure Monitor o, incluso, balancear nuestro Always On. Todo ello sin abrir el Management Studio… aunque claro, a veces sigue siendo necesario.

Casos reales donde Azure Arc tiene sentido (y donde no)

Supongamos que gestionamos un parque de 40 servidores SQL distribuidos entre varios centros de datos. Algunos son máquinas virtuales, otros físicos con clústeres Always On que llevan más tiempo activos que algunos desarrolladores del equipo. Sin Azure Arc, revisar políticas, aplicar auditorías o simplemente saber qué versión exacta está instalada en cada nodo puede convertirse en una gymkhana de RDPs.

Con Azure Arc, podemos tener una visión centralizada de todas las instancias, aplicar políticas uniformes, activar auditorías y obtener insights de seguridad con Defender sin tener que desplegar scripts o agentes por separado. Además, podemos detectar desviaciones de configuración o uso de features que podrían tener impacto en licencias.

Pero no todo es oro. Azure Arc no es una herramienta de administración del motor de SQL. No vas a hacer restores desde el portal ni crear índices con drag & drop. Tampoco es un sustituto de tus herramientas de backup, ni tiene visibilidad real sobre el rendimiento más allá de lo que Azure Monitor pueda recoger (que no es poco, pero tampoco es SentryOne).

Y lo más importante: si no tienes una estrategia clara de seguridad, gestión de red y control de agentes, puedes acabar con más puntos de fallo que beneficios. Porque, no nos olvidemos, instalar agentes y abrir tráfico a Internet en servidores productivos sin pensar en segmentación ni proxies es una receta para el desastre.

El control de licencias en Azure ARC: la parte que nadie quiere mirar

Una de las funcionalidades más interesantes (y más ignoradas) de Azure Arc para SQL Server es el control de licencias. Cuando registramos una instancia, podemos indicar si está licenciada por núcleo o por servidor + CAL. Esto, combinado con el escaneo de features activas, nos permite detectar incoherencias: como esa instancia Standard Edition que «accidentalmente» tiene particionamiento activo (Si, cuando el particionamiento era exclusivo de Enterprise en SQL 2012 esto se podía conseguir). Este control es especialmente útil en entornos con auditorías frecuentes o donde se aplican acuerdos Enterprise Agreement.

¿Y la seguridad? ¿Me estoy exponiendo a algo?

Buena pregunta. Azure Arc requiere ciertos permisos en el servidor, y abre un canal de comunicación constante con Azure. Esto plantea varias consideraciones. Primero, necesitas validar que el tráfico esté cifrado, que el agente esté actualizado, y que el acceso al servidor esté controlado. Segundo, si vas a permitir que ciertas acciones se realicen desde el portal (como cambiar configuraciones o aplicar actualizaciones), más vale que tengas RBAC bien definido en Azure.

La buena noticia es que puedes integrar todo con Azure Policy, Defender, y Log Analytics. La mala es que si no lo haces bien, estarás delegando más poder del que quieres. Y ya sabemos cómo acaba eso.
Azure Arc es gratis… hasta que abres Log Analytics

Una de las verdades menos comentadas de Azure Arc es que registrar tu instancia de SQL Server no cuesta nada. Literalmente: añadir un servidor, instalar el agente de Connected Machine y habilitar la extensión de SQL puede hacerse sin pasar por caja. Microsoft lo promueve como “coste cero” porque, en efecto, el recurso en sí no genera facturación directa.

Pero, siempre hay un pero, en cuanto queremos algo más que ver el nombre del servidor en el portal, empezamos a tirar de servicios que sí cuestan dinero. El más obvio es Log Analytics, que es el backend de todo lo que huela a monitorización seria en Azure. Activar monitorización de rendimiento, auditoría, logs extendidos, o integrar con Defender for SQL pasa irremediablemente por conectar a Log Analytics.

Y aquí viene el truco de magia inverso: el volumen de datos ingeridos, el tipo de consultas (KQL, por supuesto), y el tiempo de retención, todo suma en la factura. No es que Log Analytics sea especialmente caro, pero si estás monitorizando muchas instancias, con métricas detalladas y sin control de retención, la broma puede escalar.

Para tenerlo claro, Azure Arc proporciona el marco, pero no la observabilidad avanzada. Esa vive en Log Analytics, que sí factura. Y lo hace por cada giga ingerido. Si además activas Defender, tienes otro coste adicional por nodo protegido.

¿Merece la pena? 

Esta es la pregunta clave que debes hacerte, si tu entorno tiene requisitos serios de auditoría, cumplimiento, o simplemente quieres centralizar trazabilidad sin herramientas externas, probablemente sí. Pero conviene dimensionarlo bien, ajustar las retenciones, y entender qué datos necesitas realmente antes de abrir el grifo

Este modelo freemium no es nuevo, pero conviene recordarlo: Azure Arc para SQL Server es gratis solo si lo usas como un cartel informativo. Si quieres que hable, escuches y analices, tendrás que pasar por caja.

Conclusión

Azure Arc para SQL Server on-premises es una de esas herramientas que, bien usada, puede marcar una diferencia seria en entornos complejos. Centralizar visibilidad, aplicar políticas, y tener un inventario completo con insights de seguridad no es poca cosa. Pero, como siempre, depende de cómo se implemente.

Si ya tienes una infraestructura ordenada, con buenas prácticas de seguridad, y buscas unificar la gestión sin perder el control, Arc es una opción potente. Si tu entorno es un castillo de naipes sostenido por scripts heredados y manuales en PDF de 2009, lo mejor es empezar por ahí antes de añadir más complejidad.

Porque sí, el futuro puede ser híbrido. Pero nosotros queremos que lo sea con cabeza, no con más capas de problemas. Azure Arc no es magia, pero tampoco es humo. Y eso, hoy en día, ya es mucho decir.

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 Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima! 

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