Mes: octubre 2024

El problema de Halloween

El problema de Halloween

El problema de Halloween es una anécdota clásica en el ámbito de las bases de datos y la informática, que además de ser técnicamente relevante, tiene una historia curiosa detrás de su descubrimiento. A menudo se lo menciona en el contexto de las transacciones concurrentes y la consistencia en los sistemas de bases de datos relacionales. En este artículo, y ya que mañana celebraremos Halloween, quiero contaros en detalle la historia de este problema, y que veamos cómo eso afectó a los sistemas actuales con los que trabajamos. Sentaos y poneos cómodos amigos que este joven aprendiz de abuelo cebolleta os va a contar una historia de los inicios de las bases de datos relacionales.

Historia del problema de Halloween

Era 1976, y en los laboratorios de IBM en San José, California, un grupo de ingenieros trabajaba en el desarrollo de uno de los primeros sistemas de bases de datos relacionales: System R. Entre ellos estaban Don Chamberlin, Pat Selinger, Raymond Boyce y varios otros miembros de un equipo pionero. Su objetivo era crear un sistema eficiente que pudiera manejar grandes volúmenes de datos con integridad y consistencia, un reto tecnológico sin precedentes en aquella época.

La tarde de un viernes a finales de Octubre, mientras experimentaban con actualizaciones masivas de datos, Don Chamberlin, uno de los co-creadores del lenguaje SQL, notó un comportamiento extraño en una consulta que estaban probando. La consulta parecía simple: querían aumentar el salario de todos los empleados que ganaban menos de 3000 dólares. Así que Don escribió algo parecido a esto:

Esperaba que la consulta incrementara el salario de cada empleado que ganara menos de 3000 dólares, pero lo que vio fue desconcertante. Los sueldos de algunos empleados no solo se habían incrementado una vez, sino varias veces en la misma ejecución. Los salarios de los empleados que inicialmente ganaban 2800 dólares, por ejemplo, terminaron siendo mucho mayores de lo esperado.

¿Qué estaba pasando?

Don llamó a Pat Selinger, la ingeniera encargada de la optimización de consultas en System R, y juntos comenzaron a investigar qué estaba pasando. Descubrieron que el problema radicaba en cómo el motor de la base de datos estaba gestionando el índice de salarios. El sistema estaba utilizando el índice para seleccionar las filas que debían ser actualizadas, pero cada vez que se actualizaba el salario de un empleado, el índice no se actualizaba inmediatamente.

Esto significaba que el motor seguía viendo las mismas filas como si aún cumplieran la condición Salario < 3000, incluso después de que el salario ya hubiera sido incrementado. Así, el sistema volvía a seleccionar esas filas y aplicaba otra actualización, lo que provocaba un aumento repetido e inesperado de los salarios.

Pat, quien ya tenía una gran reputación por su trabajo en la optimización de bases de datos, se dio cuenta de que esto no era un simple error; era un problema fundamental en cómo las operaciones de actualización y selección interactuaban cuando se usaban índices. Rápidamente comprendieron que este problema podía ocurrir en cualquier situación donde los datos modificados afectaran al criterio de selección.

Al darse cuenta de la magnitud del problema, y siendo ya altas horas de la noche, el equipo decidió que no iban a poder dar una solución sencilla y que ya trabajarían en una solución al problema pasadas las fiestas de acción de gracias y Halloween, no sin antes poner un nombre al marrón que acababan de descubrir: “El problema de Halloween”.

Origen del nombre

Como acabamos de ver, el problema fue identificado por Don Chamberlin y otros miembros del equipo de investigación, quienes estaban analizando cómo el índice de salario se comportaba de manera inesperada. Curiosamente, este comportamiento erróneo fue descubierto en octubre de 1976, cerca de la fecha de Halloween. A partir de ese momento, el equipo decidió bautizarlo como el problema de Halloween, en honor a la época del año en que fue detectado.

El descubrimiento marcó un hito en la comprensión de cómo los sistemas de bases de datos podían comportarse de manera incorrecta bajo ciertas condiciones de concurrencia y actualización. Desde entonces, el problema de Halloween se convirtió en un caso de estudio clásico sobre los peligros de las transacciones concurrentes mal gestionadas.

Impacto técnico del problema de Halloween

Ya hemos contado historias, ahora pongámonos técnicos para entender por qué esto si da miedo. El problema de Halloween tiene lugar debido a la interacción entre el acceso a los datos mediante índices y las operaciones de actualización que afectan a los mismos índices. Al realizar una operación como la actualización de un campo indexado, el índice puede cambiar, lo que provoca que el plan de ejecución de la consulta vuelva a seleccionar las mismas filas que ya han sido modificadas. Esto es particularmente peligroso en operaciones que implican modificaciones masivas de registros, como las sentencias UPDATE o DELETE, ya que pueden conducir a un bucle interminable de modificaciones.

Uno de los aspectos más críticos del problema de Halloween es que afecta tanto a la consistencia de los datos como al rendimiento de la transacción. En un escenario en el que no se gestiona correctamente este problema, una operación de actualización podría realizar más cambios de los esperados, lo que lleva a resultados incorrectos. Además, la transacción podría consumir más recursos del sistema de los previstos, lo que degrada el rendimiento general.

Soluciones al problema de Halloween

Con el tiempo, los desarrolladores de motores de bases de datos han ideado varias soluciones para mitigar el problema de Halloween. Desde los bloqueos de claves y operadores de bloqueos de rango hasta el uso de los spools en los planes de ejecución de las consultas.

Bloqueos de claves

El bloqueo de claves es una técnica que asegura que las filas que están siendo leídas o modificadas en una transacción no puedan ser afectadas por otras transacciones concurrentes. En el contexto del problema de Halloween, el bloqueo de claves se utiliza para prevenir que una fila que ha sido modificada vuelva a ser seleccionada por la misma transacción. Pero, ¿Cómo funciona?

Cuando una transacción selecciona una fila basada en un índice, el motor de la base de datos coloca un bloqueo en la clave de índice asociada con esa fila. Este bloqueo persiste hasta que la transacción termina, lo que garantiza que ninguna otra transacción o la misma transacción pueda seleccionar o modificar esa fila hasta que el bloqueo se libere. Esto evita que una fila que ha sido actualizada vuelva a ser seleccionada, ya que la clave correspondiente al índice sigue bloqueada durante la ejecución de la transacción.

Operadores de bloqueos de rango

Los bloqueos de rango (range locks) son otra técnica avanzada que utilizan algunos motores de bases de datos, como SQL Server, para evitar el problema de Halloween. Estos bloqueos no solo afectan a las filas individuales, sino que bloquean un rango completo de valores de un índice para evitar que otras transacciones modifiquen o inserten filas en ese rango.

En lugar de bloquear solo una fila específica, el sistema bloquea un rango de valores en el índice. De esta manera, se garantiza que ninguna otra transacción pueda modificar o insertar nuevas filas en ese rango hasta que la transacción actual se complete.

Los bloqueos de rango previenen que las filas modificadas vuelvan a seleccionarse en la misma transacción y aseguran que las operaciones concurrentes no interfieran con la transacción actual.

Operadores Spool

El spool es un operador que actúa como una especie de «almacén temporal» de los datos que han sido leídos durante la ejecución de una consulta. Su principal función es almacenar los resultados intermedios de una operación, de modo que el motor de base de datos pueda trabajar con ellos sin necesidad de volver a acceder a la fuente de datos original. Esto es particularmente útil en casos donde la selección y la actualización de las filas podrían interactuar de manera perjudicial, como ocurre en el problema de Halloween. Existen varios tipos de spools que se utilizan en SQL Server, no vamos a entrar en detalle ahora pues ya le dedicamos un artículo completo.

Cuando SQL Server detecta que una consulta tiene el potencial de sufrir el problema de Halloween, el optimizador de consultas puede introducir un spool en el plan de ejecución para evitar que las filas modificadas sean seleccionadas de nuevo. El spool actúa como una «instantánea» de las filas seleccionadas al inicio de la transacción, de modo que las actualizaciones no afecten a la selección de filas en curso.

Dicho de otra forma, en un escenario donde SQL Server detecta el riesgo de un problema de Halloween, el plan de ejecución podría incluir un Table Spool para garantizar que las filas se procesen de forma correcta, almacenando temporalmente las filas que cumplen con la condición inicial (por ejemplo Salario < 3000). Una vez que todas las filas han sido seleccionadas, el motor aplica la actualización sin el riesgo de que las filas se vuelvan a seleccionar debido a la modificación del índice.

MVCC, la solución de Oracle

El Control de Concurrencia por Múltiples Versiones (MVCC) es un enfoque utilizado por varios sistemas de bases de datos, como PostgreSQL y Oracle. MVCC permite que múltiples versiones de las filas coexistan, lo que permite que las transacciones lean los datos sin interferir con las modificaciones de otras transacciones y así evitar el problema de Halloween.

Cuando una transacción modifica una fila, se crea una nueva versión de esa fila. Las otras transacciones que están leyendo los datos continúan accediendo a la versión anterior de la fila, mientras que la transacción que la está modificando trabaja con la nueva versión. Esto previene que las modificaciones concurrentes afecten a las lecturas en curso.

De esta manera, MVCC elimina el riesgo de que las filas actualizadas sean seleccionadas de nuevo dentro de la misma transacción, ya que las transacciones no leen las versiones modificadas hasta que estén completamente confirmadas (commit). Esto previene el problema de Halloween sin necesidad de bloqueos explícitos.

Conclusión

El problema de Halloween es un claro recordatorio de cómo los detalles técnicos de la ejecución de consultas y las actualizaciones concurrentes pueden generar comportamientos inesperados en los sistemas de bases de datos. A lo largo de los años, los avances en los motores de bases de datos han permitido mitigar este problema, y uno de los mecanismos más efectivos es el uso de operadores spool en los planes de ejecución.

Aunque el problema de Halloween fue descubierto hace más de cuatro décadas, sigue siendo relevante en los sistemas modernos que manejan grandes volúmenes de datos y transacciones concurrentes. Con el uso de operadores como los spools, los motores de bases de datos garantizan que las actualizaciones se realicen de manera eficiente y sin comprometer la consistencia de los datos, lo que permite a los desarrolladores y administradores de bases de datos centrarse en mejorar el rendimiento y la escalabilidad de sus sistemas sin preocuparse por este problema clásico.

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

¿Es recomendable usar caracteríticas en Public Preview?

El uso de características en Public Preview en productos de Microsoft genera un debate interesante dentro de la comunidad. Aunque no estamos acostumbrados a ver el uso de versiones Public Preview en producción en soluciones como SQL Server o la mayoría de servicios de Microsoft Fabric, en otros productos como Power BI sí que es más común que los usuarios adopten las nuevas funcionalidades de una manera más temprana. Lo mismo podríamos decir del SSMS, que muchos usuarios trabajan diariamente con versiones Beta.

Lo cierto es que existen ventajas y desventajas asociadas con el uso de estas funcionalidades antes de que lleguen a su fase de General Availability (GA). En este artículo vamos a ver si realmente es recomendable adoptar estas características en entornos productivos o si es preferible esperar a que se estabilicen con la liberación oficial.

Fases de Desarrollo: Hay más opciones que Public Preview o General Available

Antes de que una funcionalidad llegue a liberarse, existen varias etapas o fases en el ciclo de vida de desarrollo de un producto en las que los usuarios pueden participar. Estas fases permiten a las organizaciones y profesionales evaluar y probar características en distintos niveles de madurez. 

Beta Interna

En esta fase, las funcionalidades son probadas internamente dentro de los equipos de Microsoft. Es una etapa completamente cerrada para el público externo y su principal objetivo es corregir los errores iniciales críticos.

Private Preview

Un grupo seleccionado de usuarios avanzados, generalmente MVPs, socios estratégicos o expertos en la materia, tienen acceso a esta etapa temprana del desarrollo. En esta fase el producto no está terminado aunque se presupone que ya tiene toda la funcionalidad necesaria (por eso la disponibilidad para probar) y, en ocasiones, podemos nosotros mismos solicitar el acceso. Durante esta etapa el feedback recibido por los usuarios es crucial para afinar la funcionalidad, pero se sabe que aún puede haber cambios significativos.

Public Preview

Esta fase abre la funcionalidad a un público más amplio y permite que cualquier usuario la pruebe bajo su propio riesgo. Las características aún pueden cambiar, pero es común que las funcionalidades ya sean bastante robustas. No obstante, Microsoft advierte explícitamente sobre posibles fallos y la falta de un Acuerdo de Nivel de Servicio (SLA) para esta etapa. Esta etapa tiene una doble función, por un lado, los usuarios prueban los productos y, en caso de detectar algún problema, pueden notificarlo a Microsoft. Por otro lado, esta prueba temprana puede ayudar a las empresas a asegurar la compatibilidad de sus soluciones nada más la versión definitiva sea liberada habiendo hecho previamente los cambios necesarios.

Release Candidate (RC)

Esta fase es el último paso antes del lanzamiento oficial. El producto está casi completamente terminado, y aunque puede haber pequeñas correcciones de errores, la funcionalidad ya está prácticamente estable. Es una fase clave para los usuarios avanzados que quieran probar en escenarios reales y asegurarse de que están preparados para la versión final.

General Availability (GA)

Por último tenemos la fase GA, esta es la fase en la que la característica se considera completamente lista para producción, respaldada por SLA y con soporte completo. A partir de aquí, la funcionalidad es considerada apta para cualquier entorno de trabajo, ya sea de misión crítica o no.

 

Estas fases permiten a los usuarios involucrarse en el desarrollo de las funcionalidades, influyendo en su evolución, pero también exigen un manejo cuidadoso del riesgo, especialmente en entornos productivos.

Ventajas de Usar Funcionalidades en Public Preview

Una de las principales razones por las que algunas organizaciones deciden implementar características en Public Preview es obtener una ventaja competitiva. La adopción temprana de nuevas capacidades en SQL Server, Power BI o Fabric puede permitir a las empresas explorar nuevas oportunidades o mejorar procesos antes que sus competidores.

Por ejemplo, cuando se lanzaron funcionalidades como Columnstore Index en SQL Server o avances en DirectQuery y Dataflows en Power BI, las organizaciones que adoptaron estas características en fases tempranas pudieron optimizar sus procesos de análisis y gestión de datos más rápidamente que aquellos que esperaron hasta la fase de GA​​.

Además, la fase de Public Preview ofrece a los usuarios la oportunidad de influir en el desarrollo del producto. Los comentarios proporcionados por los usuarios son fundamentales para corregir errores y ajustar las funcionalidades a los escenarios reales de uso.

Inconvenientes de Usar Funcionalidades en Public Preview

A pesar de las ventajas, las características en Public Preview también presentan inconvenientes. La principal preocupación es la estabilidad. Dado que las funcionalidades están en constante desarrollo, es posible que no sean completamente fiables o que presenten errores importantes, lo que puede tener un impacto negativo en entornos productivos.

Un ejemplo de este riesgo ocurrió con la implementación temprana de Columnstore Indexes en SQL Server. Aunque la funcionalidad prometía mejoras de rendimiento significativas, las primeras versiones presentaban limitaciones importantes que reducían su eficacia. Los usuarios que implementaron esta tecnología tuvieron que realizar modificaciones considerables en sus consultas para aprovecharla plenamente​.

Además, las funcionalidades en Public Preview no suelen estar cubiertas por acuerdos de nivel de servicio (SLA), lo que significa que no hay garantía de resolución rápida de problemas. En entornos productivos , especialmente de misión crítica, este es un riesgo que muchas organizaciones no están dispuestas a asumir.

¿Cuándo actualizar?

Uno de los dilemas más comunes en la adopción de tecnología es decidir cuándo es el momento adecuado para actualizar a una nueva versión una vez que ha alcanzado la fase de General Availability (GA). Aunque las versiones GA son estables y están listas para producción, la decisión de actualizar inmediatamente puede variar según el entorno y las necesidades del negocio.

En entornos productivos críticos, como bases de datos o aplicaciones de análisis de datos, puede ser prudente esperar entre 3 y 6 meses tras el lanzamiento de GA antes de actualizar. Este margen de tiempo permite que se identifiquen y solucionen posibles problemas que no fueron detectados en las fases de prueba y permite beneficiarse de actualizaciones menores y parches que mejoran la estabilidad.

Sin embargo, en productos como Power BI, donde las actualizaciones suelen ser menos arriesgadas, algunas organizaciones optan por actualizar inmediatamente para aprovechar las nuevas funcionalidades y mejoras de rendimiento. Aunque no están libres de riesgo y en más de una ocasión he visto problemas graves. En resumen, la decisión debe basarse en el entorno específico y el nivel de riesgo que la organización esté dispuesta a asumir. Personalmente, para este producto con actualizaciones mensuales mi recomendación es tener los entornos productivos siempre una versión por debajo de la última, es decir, esperar un mes. 

Para cerrar este apartado es importante destacar que no siempre es posible esperar para actualizar. En ocasiones, nos vemos obligados a actualizar nada más una versión es liberada para solucionar un incidente de la anterior. Por ejemplo la actualización acumulativa 15 de SQL Server 2022 soluciona una incidencia con CDC causada por la anterior actualización.

Estrategia de Pruebas con Public Preview

Si decidimos adoptar características en Public Preview o Release Candidate, es crucial tener un plan de pruebas bien estructurado. Implementar nuevas funcionalidades en entornos de pruebas antes de migrarlas a producción es una práctica esencial para mitigar riesgos.

Es imprescindible que las funcionalidades en Public Preview o RC se prueben en un entorno de desarrollo o pruebas separado de la producción. Esto evita que los problemas afecten al entorno productivo. Sin embargo, aunque separado, debería ser idéntico al entorno productivo. En este sentido, también es recomendable probar la funcionalidad bajo condiciones de carga similares a las de producción ayuda a identificar problemas de rendimiento que podrían no ser evidentes en pruebas ligeras.

Además deberemos implementar herramientas de monitorización y proporcionar retroalimentación a Microsoft sobre los problemas encontrados ya que esto permite un ajuste continuo de las funcionalidades y contribuye al desarrollo del producto.

Por último, siempre debemos tener un plan B, debe existir un plan para revertir los cambios si la nueva funcionalidad no funciona como se esperaba. Este es un paso crítico, especialmente en entornos de misión crítica.

Excepciones: SSMS Public Preview

Una excepción personal que sigo es con SQL Server Management Studio (SSMS). En este caso, Microsoft permite instalar las versiones en Public Preview junto con versiones estables anteriores sin desinstalar las mismas. Esto me permite probar nuevas características sin el riesgo de perder acceso a las herramientas que uso diariamente.

Mi estrategia es instalar SSMS en Public Preview en mi equipo de trabajo, pero no en los servidores de producción, obviamente. De esta forma, puedo probar las funcionalidades sin comprometer la estabilidad de los entornos críticos. Si las nuevas características funcionan correctamente, sigo usándolas; de lo contrario, siempre puedo volver a la versión estable. Además, reporto cualquier problema que detecte a Microsoft, lo que contribuye al desarrollo del producto.

Conclusión

La adopción de características en Public Preview o esperar a la fase de General Availability depende del nivel de riesgo que estemos dispuestos a asumir. Aquellos que buscan mantenerse a la vanguardia tecnológica y participar en el desarrollo del producto pueden beneficiarse de la adopción temprana, pero para entornos productivos críticos, es más seguro esperar hasta que la funcionalidad esté completamente probada y respaldada por un SLA. En algunos casos, como con SSMS, es posible adoptar un enfoque más flexible, probando las nuevas características sin comprometer la estabilidad operativa. Sin embargo, en general, la decisión de actualizar debe basarse en una evaluación cuidadosa del entorno, los riesgos y los beneficios esperados.

Y ahora os invito a debatir: ¿Cuál ha sido vuestra experiencia usando características en Public Preview? ¿Esperáis a la fase de GA para actualizar o adoptáis nuevas tecnologías en cuanto están disponibles? ¿Qué estrategias de pruebas habéis implementado para mitigar los riesgos?

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 Power BI, SQL Server, 0 comentarios

La pronunciación de SQL: ¿Es-kiu-el o Sicuel?

Una de las discusiones más recurrentes cuando hablamos de bases de datos es cómo se debe pronunciar «SQL» cuando hablamos en inglés: ¿deberíamos decir es-kiu-el o, como mucha gente pronuncia, sicuel? Aunque a primera vista pueda parecer un tema trivial, la evolución de este debate está profundamente entrelazada con la historia de uno de los lenguajes más importantes para la gestión de bases de datos. En este artículo, vamos a hablar de la historia del origen de SQL y su impacto en sistemas como SQL Server y PostgreSQL, mientras aclaramos cómo y por qué se originaron estas dos pronunciaciones.

Orígenes de SQL: El nacimiento de SEQUEL

El lenguaje SQL, que significa Structured Query Language (Lenguaje de Consulta Estructurado), fue desarrollado a principios de la década de 1970 en los laboratorios de IBM por Donald D. Chamberlin y Raymond F. Boyce, basándose en las teorías relacionales de Edgar F. Codd. Inicialmente, el lenguaje se llamaba SEQUEL (Structured English Query Language). El nombre SEQUEL, en inglés, se asemeja fonéticamente a sicuel, por no decir que es prácticamente igual.

Este término refleja la idea original del lenguaje de ser una herramienta de consulta para gestionar bases de datos relacionales. Sin embargo, debido a problemas legales con una empresa británica que ya tenía registrada la marca SEQUEL, IBM decidió cambiar el nombre a SQL. A pesar de este cambio, muchos de los primeros usuarios continuaron usando la pronunciación sicuel, que evocaba al nombre original.

El cambio a SQL y la aparición de es-kiu-el

Aunque el nombre oficial pasó a ser SQL, la pronunciación original sicuel permaneció en uso, especialmente entre aquellos que ya estaban familiarizados con SEQUEL. Sin embargo, también comenzó a surgir una nueva pronunciación: es-kiu-el, que es simplemente el resultado de pronunciar las letras «S-Q-L» por separado en inglés (S es «es», Q es «kiu», L es «el»). Este enfoque más literal se volvió popular, especialmente en entornos más técnicos y entre usuarios que preferían la claridad de pronunciar las siglas tal cual.

Con el tiempo, ambas pronunciaciones coexistieron. La pronunciación sicuel estaba más arraigada entre quienes habían empezado a trabajar con el lenguaje en sus primeros días, mientras que es-kiu-el comenzó a ganar popularidad entre generaciones posteriores y en entornos donde era común pronunciar las siglas una a una.

SQL Server y el debate sobre la pronunciación

SQL Server, desarrollado por Microsoft, ha sido uno de los actores clave en la popularización de SQL a nivel mundial. Lanzado en 1989, este sistema de gestión de bases de datos relacional ha jugado un papel crucial en el crecimiento de SQL como estándar global. A lo largo de su historia, el equipo de SQL Server ha utilizado ambas pronunciaciones de SQL.

Si no me cree mira este vídeo de un anuncio de SQL Server protagonizado por Ed Esber y el mismo Bill Gates en 1989. En el video podemos ver cómo ambas pronunciaciones, sicuel y es-kiu-el, se utilizan de manera intercambiable. Esta falta de un consenso claro refleja cómo las dos formas han coexistido a lo largo del tiempo, sin una regla estricta que indique cuál es la «correcta».

PostgreSQL: Su influencia en la pronunciación

PostgreSQL, a menudo abreviado como Postgres, es otro sistema de gestión de bases de datos relacional que ha jugado un papel importante en la historia de SQL. Al igual que SQL Server, PostgreSQL ha influido profundamente en la evolución de SQL, aunque su origen es independiente.

PostgreSQL fue desarrollado en la Universidad de California en Berkeley en 1986 como parte del proyecto POSTGRES, liderado por el profesor Michael Stonebraker. Inicialmente, Postgres no estaba diseñado para utilizar SQL, sino que empleaba su propio lenguaje de consultas llamado QUEL. No fue hasta 1994 cuando PostgreSQL adoptó SQL como lenguaje estándar, lo que permitió que el sistema ganara popularidad en el ámbito empresarial.

En la comunidad de PostgreSQL, la pronunciación sicuel es también común, ya que se remonta al origen de SQL como SEQUEL. Sin embargo, al igual que con SQL Server, muchos usuarios optan por la pronunciación es-kiu-el, especialmente en países donde es común leer las siglas de manera literal, como ocurre en gran parte del mundo hispanohablante.

El impacto de PostgreSQL en la estandarización

PostgreSQL no solo adoptó SQL, sino que ha jugado un papel crucial en su estandarización y expansión. A lo largo de los años, ha implementado una serie de características avanzadas que luego se han incorporado al estándar SQL, lo que ha reforzado su posición como uno de los motores más potentes y completos. Entre sus aportaciones destacan:

  • CTEs recursivos (Common Table Expressions): Que permiten realizar consultas jerárquicas complejas.
  • Soporte avanzado para JSON: PostgreSQL fue pionero en el manejo de datos no estructurados con JSON, una capacidad que luego se ha vuelto esencial en otros sistemas.
  • Herencia de tablas: Una característica única que extiende el modelo relacional tradicional.

Estas características han influido significativamente en la dirección del estándar SQL y han ayudado a que PostgreSQL sea ampliamente reconocido como uno de los sistemas más avanzados y robustos.

La influencia cultural y regional en la pronunciación de SQL

La elección entre sicuel y es-kiu-el no solo refleja preferencias personales o generacionales, sino también influencias culturales y regionales. En muchos países de habla hispana, es más común escuchar es-kiu-el, ya que esta pronunciación se ajusta mejor a las reglas fonéticas del español. En cambio, en el mundo angloparlante, sicuel sigue siendo predominante, sobre todo entre aquellos que conocieron el lenguaje en su versión original como SEQUEL.

Este fenómeno se observa también en empresas globales, yo lo he visto hasta en Microsoft, donde las pronunciaciones varían incluso entre los empleados. La alternancia entre es-kiu-el y sicuel, como se muestra en el vídeo de SQL Server, subraya que ambas formas son aceptables, y la preferencia suele depender del contexto o de las personas involucradas en la conversación.

Conclusión

No existe una pronunciación «correcta» de SQL. Tanto es-kiu-el como sicuel son formas válidas de referirse al lenguaje. La pronunciación que elijas dependerá de factores como tu trasfondo, la región en la que trabajas y las preferencias de tu entorno. SQL, ya sea pronunciado como sicuel o es-kiu-el, sigue siendo el estándar indiscutible para la gestión de bases de datos relacionales y continuará evolucionando gracias a sistemas como SQL Server y PostgreSQL.

Este debate sobre la pronunciación es solo una pequeña parte de la rica historia de SQL, un lenguaje que ha transformado el mundo de los datos y que sigue siendo fundamental para la infraestructura tecnológica moderna. Lo importante, más allá de cómo lo pronuncies, es la capacidad que ofrece SQL para gestionar y manipular datos de manera eficiente y robusta.

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 SQL Server, 0 comentarios
¿Es la nube una solución competitiva?

¿Es la nube una solución competitiva?

Para hacer una solución SaaS (Software as a Service) e IaaS (Infrastructure as a Service) basada en Azure SQL y SQL Server realmente competitiva a nivel empresarial, debemos ser críticos y realistas. Aunque la nube ha sido abrazada por la mayoría de las empresas, siguen existiendo debates sobre los costes, el rendimiento y si realmente es la mejor opción en todos los casos. La cuestión de si las soluciones en la nube son superiores a las on-premise sigue siendo un tema caliente, y en este artículo vamos a tratar de abordar esta comparativa con argumentos sólidos, analizando tanto las ventajas como las desventajas de cada enfoque.

¿Es la nube realmente más barata que on-premise?

Uno de los argumentos más comunes a favor de las soluciones en la nube, como Azure SQL Database y SQL Server en IaaS (Azure VM), es que son más baratas que las soluciones on-premise. Pero, ¿es esto siempre cierto? La respuesta corta es: depende. La realidad es que en muchos casos, las empresas descubren que los costes a largo plazo de la nube pueden exceder a los de las soluciones tradicionales on-premise, especialmente si no se gestionan adecuadamente. De hecho, he visto cómo algunas empresas han comenzado a reconsiderar su migración a la nube debido a las crecientes facturas de servicios como Azure.

Comparativa de costes: Nube vs. On-Premise

Azure ofrece una estructura de precios que parece atractiva a primera vista, con pagos por uso (pay-as-you-go) que prometen flexibilidad y ahorro. Sin embargo, en la práctica, la realidad de los costes en la nube es muy diferente. Cuando migras a la nube, hay varios factores que rápidamente pueden inflar la factura:

Costes ocultos

Aunque Azure permite escalar hacia arriba y hacia abajo según la demanda, las empresas a menudo subestiman las horas que sus máquinas virtuales (VMs) y bases de datos están en funcionamiento. Servicios como Azure SQL Database, Managed Instance y SQL Server en máquinas virtuales (IaaS) pueden escalar en función de la demanda, pero esto puede resultar en facturas inesperadas si no se implementan estrategias adecuadas de monitoreo y escalado automático​​. Además, para aprovechar estas ventajas, normalmente no basta con subir el código ya desarrollado (lift and shift) sino que hay que hacer adaptaciones para sacar partido a las ventajas de este nuevo paradigma.

Licenciamiento

Mientras que SQL Server on-premise requiere un pago inicial considerable por licencias, las soluciones en la nube suelen requerir un pago constante y por suscripción. Azure Hybrid Benefit promete ayudar a reducir estos costes reutilizando licencias de SQL Server existentes, pero la realidad es que muchas empresas no pueden aprovechar este beneficio de manera efectiva, o descubren que las economías de escala no son tan favorables como se prometía​. Por otro lado, estamos asistiendo lentamente a la adopción del modelo de suscripción en SQL Server on-premise como el modelo de facturación Software Assurance que, a costa de un pago anual, nos proporciona características extra a nuestra licencia.

Costes de salida de datos

Un aspecto frecuentemente pasado por alto es el coste de descarga de datos desde la nube. En algunas plataformas en la nube, los costes de mover datos fuera de la nube, ya sea para hacer backups, migraciones o simplemente para integraciones con sistemas locales, pueden ser significativos. Este es un coste que las soluciones on-premise no tienen.

Rendimiento La batalla entre la nube y on-premise

Ahora bien, el tema del rendimiento es otro punto de fricción importante entre las soluciones en la nube y las soluciones tradicionales. Aquí, la historia no siempre favorece a la nube. Aunque Azure SQL Database y las soluciones SQL Server en IaaS prometen escalabilidad casi infinita, la realidad es que on-premise sigue ofreciendo mejor rendimiento en ciertas cargas de trabajo intensivas.

Escalabilidad y latencia

La capacidad de escalar automáticamente en Azure es una ventaja indiscutible cuando hablamos de escenarios variables, como el comercio electrónico o los servicios de streaming, donde las cargas fluctúan enormemente. Sin embargo, este beneficio tiene un precio en términos de latencia y rendimiento constante. En entornos on-premise, con infraestructura dedicada, la latencia y el rendimiento son más predecibles. Las aplicaciones que requieren baja latencia y un rendimiento constante, como las transacciones financieras o sistemas de bases de datos de alta concurrencia, pueden seguir funcionando mejor en infraestructura on-premise​​.

Por ejemplo, en una base de datos SQL Server alojada en Azure Virtual Machines, aunque puedas optar por discos premium y múltiples núcleos de CPU, la realidad es que la latencia de red entre las capas de aplicación y base de datos sigue siendo un factor limitante. Incluso con las opciones de red más optimizadas en Azure, una base de datos en un entorno on-premise configurada correctamente sigue siendo significativamente más rápida.

La trampa de la escalabilidad «ilimitada»

Uno de los mayores argumentos de venta de Azure es la escalabilidad ilimitada. Pero aquí es donde surge un gran problema: la escalabilidad tiene límites prácticos en cuanto a la optimización de la infraestructura y el coste que estás dispuesto a asumir. A medida que tu base de datos crece y requieres más recursos, los costes también se disparan, y en algunos casos, escalar en on-premise puede ser una mejor solución a largo plazo. Si tu carga de trabajo es predecible y estable, invertir en un sistema robusto on-premise puede ser significativamente más rentable que pagar por la escalabilidad en la nube de manera indefinida.

Además, muchos desconocen que algunas de las estrategias de escalado más avanzadas, como el uso de Elastic Pools en Azure SQL o la implementación de sharded databases, requieren una cantidad considerable de desarrollo adicional para optimizar. Esto significa que la promesa de una escalabilidad sencilla y sin fricciones en Azure no siempre se cumple sin costes adicionales de desarrollo y mantenimiento​. Volvemos a lo que comentábamos antes, subir a la nube implica adaptaciones en el código y, muchas veces, solo nos será rentable para nuevos desarrollos.

Seguridad: ¿Es la nube realmente más segura?

Otro mito popular es que la nube es intrínsecamente más segura que las soluciones on-premise. Si bien Azure ofrece una gama de herramientas de seguridad impresionantes como Azure Security Center, en muchos casos, la seguridad en la nube depende de cómo la configures. Por ejemplo, la gestión de claves de cifrado, la configuración de firewalls y la implementación de políticas de acceso son tareas que, si no se configuran correctamente, pueden dejar a una empresa vulnerable a ataques o fugas de datos​. Es tan compleja esta gestión que, en los últimos años, estamos viendo como crece la demanda de arquitectos cloud en las empresas.

Además, las empresas con grandes cantidades de datos sensibles o que operan en sectores altamente regulados, como el financiero o sanitario, a menudo prefieren seguir manteniendo sus datos on-premise por un mejor control sobre el acceso físico y la localización de los datos. De hecho, muchas empresas todavía desconfían de la nube para manejar datos confidenciales, y optan por mantener una infraestructura híbrida u on-premise para cumplir con las normativas locales de protección de datos.

Por último, a esto habría que añadir las limitaciones en cuanto a cumplimiento normativo. En determinados sectores regulados alojar datos fuera de la infraestructura de la empresa o no está permitido o requiere de una carga burocrática elevada. Y aún siendo posible, hay que extremar las precauciones y elegir bien las zonas geográficas donde se van a alojar los datos para no incurrir en problemas legales.

¿Hacia dónde vamos?

Para mi está claro, el futuro es híbrido. A pesar de las ventajas que ofrece la nube, está claro que no es la panacea para todas las situaciones. Es aquí donde el modelo híbrido se convierte en una solución inteligente para muchas empresas. El uso de bases de datos SQL Server en Azure, combinado con una infraestructura on-premise bien gestionada, permite aprovechar lo mejor de ambos mundos. Puedes tener la flexibilidad de la nube para cargas de trabajo variables, al mismo tiempo que mantienes un rendimiento consistente y control total sobre los datos más sensibles en entornos locales.

El debate no se trata de «nube vs. on-premise», sino de cuándo y cómo aprovechar cada tecnología de manera efectiva. Por ejemplo, Azure Arc permite extender las capacidades de administración de Azure a entornos on-premise y otros entornos en la nube, facilitando una verdadera experiencia híbrida. Esto permite a las empresas beneficiarse de las herramientas de administración avanzada de Azure, mientras siguen utilizando su infraestructura local para cargas críticas.

Conclusión

La nube tiene ventajas indiscutibles en términos de flexibilidad, facilidad de escalado y disponibilidad global, pero eso no significa que sea la mejor opción para todas las empresas o todas las cargas de trabajo. Los costes y el rendimiento de las soluciones en la nube no siempre superan a las soluciones on-premise, especialmente cuando hablamos de cargas de trabajo predecibles o sensibles a la latencia. Como profesionales de bases de datos, debemos ser críticos y cuidadosos al considerar qué opción es la mejor para nuestros clientes o nuestras empresas.

La clave está en evaluar las necesidades específicas y no dejarse llevar por el bombo publicitario de la nube ni por la comodidad que nos dan años de experiencia on-premise. La mejor solución sigue siendo aquella que esté alineada con los objetivos de negocio, y esto podría implicar el uso de la nube, de soluciones on-premise, o de un enfoque híbrido.

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

KQL y Kusto DB para análisis Real-Time

Hoy quiero hablaros de KQL (Kusto Query Language) y las bases de datos Kusto disponibles en Azure y en el ecosistema de Microsoft Fabric. Estas bases de datos KQL son una herramienta clave para el análisis de grandes volúmenes de datos en tiempo real. Estas tecnologías están diseñadas para gestionar datos masivos de forma eficiente, permitiendo a los usuarios realizar consultas rápidas y complejas sobre registros de datos, logs y telemetría.

Introducción a KQL y Kusto DB en Fabric

Primero de todo, si es la primera vez que oyes hablar de esto, veamos que es KQL. KQL es el lenguaje de consulta utilizado por Azure Data Explorer y las bases de datos Kusto, especialmente útiles en escenarios como monitorización, análisis de logs y análisis de grandes conjuntos de datos. Microsoft Fabric, que incluye servicios como Synapse y Power BI, ha integrado estas herramientas para potenciar su capacidad de análisis en tiempo real. Esta tecnología permite a los usuarios realizar consultas y análisis de registros masivos con eficiencia, algo crítico para sistemas con grandes volúmenes de datos, como aplicaciones empresariales, infraestructuras TI y soluciones de IoT.

Una de las principales ventajas de KQL es su simplicidad y velocidad. A diferencia de SQL, que está optimizado para operaciones transaccionales, KQL se especializa en análisis y consultas sobre flujos masivos de datos. La base de datos Kusto, que soporta KQL, es una base de datos columnar altamente optimizada para la ingesta rápida de datos y consultas ad-hoc.

Fundamentos de KQL

KQL es un lenguaje declarativo y, aunque tiene similitudes con SQL en cuanto a la estructura de las consultas, es mucho más adecuado para escenarios de análisis de grandes volúmenes de datos. Las consultas en KQL siguen un flujo lógico que permite filtrar, agregar, ordenar y transformar datos de manera eficiente.

  • Filtros: La capacidad de filtrar grandes volúmenes de datos rápidamente es fundamental en KQL. A través de operadores como where, es posible reducir drásticamente el conjunto de datos con condiciones sencillas o complejas.
  • Agregación: KQL soporta agregaciones avanzadas como sumas, conteos y promedios, utilizando funciones como summarize para realizar análisis rápidos sobre millones de registros.
  • Uniones y Transformaciones: Con join, se pueden realizar combinaciones entre tablas, algo esencial para análisis más detallados que requieren cruzar múltiples fuentes de datos.

Por ejemplo, una consulta básica para filtrar y agregar datos en KQL podría verse así:

En este ejemplo, se filtran los registros de logs de las últimas 24 horas, se agrupan en intervalos de un día y se ordenan por el tiempo.

Kusto DB: La base de datos columnar en Fabric

Kusto es la base de datos subyacente que soporta las consultas en KQL. Esta tecnología se desarrolló para gestionar grandes cantidades de datos de telemetría y logs, proporcionando respuestas rápidas y escalabilidad masiva.

Kusto está optimizado para la ingesta rápida de datos, permitiendo el almacenamiento columnar y la compresión eficiente. Su diseño está pensado para consultas sobre millones de filas de datos de manera eficiente, algo que no siempre es posible con bases de datos relacionales tradicionales.

Ingesta y procesamiento en tiempo real con KQL

Una de las principales fortalezas de Kusto DB es su capacidad para la ingesta de datos en tiempo real. Esta característica es crucial en escenarios donde los datos se generan continuamente, como en la monitorización de aplicaciones, la ciberseguridad o el seguimiento de infraestructuras. Kusto utiliza tecnologías avanzadas de almacenamiento columnar, permitiendo la segmentación eficiente de los datos y consultas optimizadas.

Microsoft Fabric aprovecha esta tecnología para análisis de datos en tiempo real, lo cual es vital para empresas que necesitan monitorizar sistemas críticos o tomar decisiones basadas en flujos de datos en tiempo real.

Escalabilidad Horizontal

Kusto es una base de datos distribuida que, igual que la mayoría de soluciones de servicios en la nube, está diseñada para escalar horizontalmente de manera eficiente. Esto significa que a medida que aumenta el volumen de datos, Kusto puede expandirse fácilmente para manejar la carga adicional sin sacrificar el rendimiento. Esta arquitectura es ideal para grandes implementaciones empresariales donde el volumen de datos crece de manera exponencial.

En Microsoft Fabric, Kusto se integra perfectamente con otros servicios, como Azure Synapse y Power BI, lo que permite crear soluciones de análisis completas que van desde la ingesta de datos hasta la visualización y el análisis en tiempo real.

Integración de Kusto DB con Microsoft Fabric

En Microsoft Fabric, Kusto DB no actúa de manera aislada, sino que está profundamente integrado con otros componentes clave de la plataforma de datos de Microsoft. Esto incluye la capacidad de ingerir datos desde múltiples fuentes con Dataflows Gen2, procesarlos con notebooks y visualizarlos en herramientas como Power BI o Microsoft Synapse, por ejemplo.

Sinergia con Power BI y Synapse

Power BI, la plataforma de visualización de datos de Microsoft, se puede conectar directamente a Kusto DB, permitiendo crear dashboards y reportes interactivos en tiempo real basados en los datos almacenados. Además, KQL puede utilizarse dentro de Synapse para análisis más detallados, integrando las capacidades de análisis en tiempo real de Kusto con los procesos de análisis de datos más tradicionales.

Por ejemplo, un escenario común es el análisis de logs de ciberseguridad en una gran infraestructura. Los datos de los logs se ingieren en tiempo real en Kusto DB, donde se procesan utilizando KQL. Los resultados pueden visualizarse directamente en Power BI, lo que permite a los equipos de seguridad reaccionar rápidamente ante cualquier anomalía o amenaza detectada.

Casos de uso de KQL en el mundo real

El uso de KQL y Kusto DB en Fabric está especialmente extendido en industrias que necesitan monitorización y análisis en tiempo real de grandes volúmenes de datos. Algunos ejemplos clave incluyen:

  • Monitorización de Aplicaciones en la Nube: Las empresas que gestionan aplicaciones distribuidas en la nube pueden utilizar Kusto DB para almacenar y analizar logs de rendimiento y errores en tiempo real.
  • Seguridad y Cumplimiento: Como ya hemos visto, las organizaciones pueden usar KQL para analizar logs de seguridad, identificando patrones de acceso no autorizados o ataques potenciales. El análisis en tiempo real es esencial para minimizar el impacto de brechas de seguridad.
  • IoT y Telemetría Industrial: Con cada vez más datos provenientes de dispositivos IoT, Kusto permite gestionar y analizar grandes flujos de datos generados por sensores industriales, permitiendo a las empresas mejorar su eficiencia operativa y detectar fallos antes de que se conviertan en problemas.

Conclusión

KQL y Kusto DB son herramientas poderosas dentro del ecosistema de Microsoft Fabric, ofreciendo capacidades de análisis en tiempo real que son esenciales para las empresas modernas. La capacidad de manejar grandes volúmenes de datos, junto con la integración con otras herramientas como Power BI y Synapse, hace que Kusto sea una opción ideal para escenarios de monitorización y análisis de datos masivos. A medida que las empresas continúan generando más datos, tecnologías como KQL y Kusto seguirán desempeñando un papel crucial en la transformación digital.

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, Otros, Power BI, 1 comentario

Tablas Expandidas en Power BI

Como muchos de los que me leéis ya sabéis, dentro de una semana arrancan los Power BI Days de Santiago de Compostela. Un evento espectacular que lleva el conocimiento en Power BI y Fabric de manera altruista por toda la geografía española. Y, ya con la vista puesta en el evento que, por supuesto, no me voy a perder, estaba pensando en la anterior edición. En ella, pude asistir, entre otras, a una magistral charla de Ricardo Rincón y Miguel Egea sobre las tablas expandidas en Power BI. Y, pensando en esto, me he acordado de que yo no os he hablado a vosotros de este concepto. 

El concepto de tablas expandidas en Power BI es fundamental para entender cómo funcionan cosas tan básicas como las relaciones entre tablas y la propagación de filtros. Las tablas expandidas permiten que Power BI maneje automáticamente la interacción entre múltiples tablas relacionadas, facilitando la creación de informes y cálculos avanzados sin necesidad de escribir complejas consultas. En este artículo, vamos a intentar ver en detalle qué son las tablas expandidas, cómo funcionan y cómo pueden aprovecharse para optimizar modelos de datos en Power BI. 

¿Qué son las tablas expandidas?

Las tablas expandidas en Power BI son una representación lógica que se crea a partir de las relaciones establecidas entre las tablas de un modelo de datos. Cuando las tablas están relacionadas a través de relaciones de muchos a uno o uno a uno, Power BI trata esas tablas como si fueran una sola entidad expandida. Esto permite que los filtros y los cálculos se propaguen automáticamente a través de esas tablas relacionadas, sin necesidad de que el usuario intervenga directamente en la relación, es decir, sin tener que hacer un join como hacemos en SQL.

Imaginad un modelo de datos simple donde tenemos una tabla de Ventas, una tabla de Productos y una tabla de Categorías. La relación entre estas tablas nos permite que, al aplicar un filtro a la tabla de Categorías, los datos correspondientes en las tablas de Productos y Ventas se actualicen automáticamente, gracias al uso de las tablas expandidas.

Este comportamiento es clave para simplificar el análisis de datos en Power BI, ya que elimina la necesidad de realizar operaciones manuales para combinar datos de diferentes tablas. Las tablas expandidas también permiten que los cálculos en DAX (Data Analysis Expressions) se apliquen de manera automática a través de múltiples tablas relacionadas.

¿Cómo funcionan las tablas expandidas?

El funcionamiento de las tablas expandidas depende de las relaciones que existen en el modelo de datos. En Power BI, las relaciones de uno a muchos y uno a uno son las que permiten la propagación de filtros. Esto es importante pues como ves no estoy incluyendo aquí las relaciones muchos a muchos. Cuando se crea una relación de muchos a uno entre dos tablas, Power BI automáticamente añade (de manera lógica) todos los campos de la tabla del lado del 1 en la del lado del mucho de manera que internamente trabaja como una sola tabla expandida. Sin embargo, cuando las relaciones son 1:1 todos los campos de las tablas se propaga a la otra, y viceversa.

Por ejemplo, si tenemos una tabla de Productos y una tabla de Ventas, con una relación entre ambas basada en el ID del Producto, cualquier filtro que apliquemos en la tabla de Productos se reflejará automáticamente en los datos de la tabla de Ventas. Esto es posible gracias a las tablas expandidas, que permiten que Power BI combine virtualmente las dos tablas en una sola.

Este comportamiento no solo se aplica a la visualización de datos, sino también a los cálculos realizados con DAX. Al usar medidas que involucran tablas relacionadas, Power BI toma en cuenta automáticamente las tablas expandidas, lo que facilita la creación de cálculos complejos sin necesidad de realizar combinaciones manuales de datos.

Propagación de filtros y relaciones

Una de las principales ventajas de las tablas expandidas es su capacidad para manejar automáticamente la propagación de filtros entre tablas. Cuando aplicamos un filtro en una tabla que está relacionada con otras, Power BI propaga el filtro a través de las relaciones, afectando las tablas relacionadas sin que sea necesario especificarlo explícitamente en el código.

Por ejemplo, en un modelo de datos con las tablas Ventas, Productos y Categorías, si aplicamos un filtro en la tabla Categorías (como seleccionar solo productos de la categoría «Electrónica»), Power BI propagará automáticamente ese filtro a las tablas Productos y Ventas. Esto significa que cualquier visualización o cálculo basado en las tablas Productos o Ventas reflejará solo los datos relacionados con la categoría «Electrónica», sin necesidad de que el usuario especifique esa relación en cada consulta.

Como ves, esto simplifica enormemente la creación de informes y análisis, ya que los usuarios no necesitan preocuparse por cómo se combinan los datos de diferentes tablas, Power BI lo maneja automáticamente a través de las tablas expandidas.

Uso de DAX y las tablas expandidas

El lenguaje DAX en Power BI aprovecha al máximo el concepto de tablas expandidas para realizar cálculos avanzados. Al crear medidas en DAX, Power BI utiliza automáticamente las tablas expandidas para propagar los cálculos a través de las tablas relacionadas. Esto permite simplificar los cálculos, ya que no es necesario especificar las combinaciones manuales entre tablas.

Veamos un ejemplo práctico utilizando DAX. Imaginemos que queremos calcular el total de ventas por categoría de producto, usando las tablas Ventas, Productos y Categorías mencionadas anteriormente. Gracias a las tablas expandidas, podemos escribir una medida que se aplique automáticamente a todas las tablas relacionadas.

Ejemplos prácticos de tablas expandidas en Power BI

Para comprender mejor cómo las tablas expandidas simplifican el análisis en Power BI, os he preparado varios ejemplos prácticos.

Estructura de las tablas

Tabla Ventas:

ID Venta ID ProductoCantidad Precio Total
1P001 10100
2P002550
3P003 880

Tabla Productos:

ID ProductoNombre Producto ID Categoría
P001 TelevisorC001
P002Lavadora C002
P003Microondas C001

Tabla Categorías:

ID Categoría Nombre Categoría
C001Electrónica
C002Electrodomésticos

Ejemplo 1: Total de ventas por categoría

En este ejemplo, queremos calcular el total de ventas por categoría. Gracias a las tablas expandidas, podemos hacerlo sin tener que realizar combinaciones explícitas entre las tablas Ventas y Categorías.

Medida DAX:

Total Ventas por Categoría = 

Explicación:

La medida recorre la tabla de Productos y, para cada producto, calcula la suma del Precio Total de las ventas asociadas. Power BI expande automáticamente la tabla de Productos para incluir los datos de Ventas y Categorías, aplicando los filtros correspondientes.

Resultado esperado:

Nombre Categoría Total Ventas
Electrónica 180
Electrodomésticos 50

Ejemplo 2: Filtrar por categoría

Queremos calcular las ventas totales solo para productos de la categoría «Electrónica». Nuevamente, Power BI manejará automáticamente la propagación del filtro a través de las tablas expandidas.

Medida DAX:

Total Ventas Electrónica = 

 Resultado esperado:

Ejemplo 3: Visualización con tablas expandidas

Podemos crear una visualización que muestre las ventas por producto y categoría. Gracias a las tablas expandidas, no necesitamos incluir manualmente todas las tablas en la visualización.

 Visualización:

Utilizamos las columnas Nombre Categoría de Categorías, Nombre Producto de Productos y el Precio Total de Ventas.

 Resultado esperado:

Implicaciones de rendimiento

Aunque las tablas expandidas simplifican el modelado de datos, es importante ser conscientes de su impacto en el rendimiento. A medida que creamos más relaciones y tablas expandidas, el modelo de datos puede volverse más complejo, lo que puede afectar al tiempo de respuesta en las consultas y visualizaciones.

Para mitigar este impacto, es recomendable optimizar las relaciones y el tamaño de las tablas. Evitar tablas innecesariamente grandes o relaciones que no sean estrictamente necesarias puede ayudar a mantener el rendimiento del modelo bajo control.

Conclusión

Las tablas expandidas son una herramienta poderosa en Power BI que permite simplificar el análisis de datos a través de la propagación automática de filtros y la integración de datos entre múltiples tablas relacionadas. Al utilizar tablas expandidas, los usuarios pueden crear modelos de datos más eficientes y realizar cálculos complejos con menor esfuerzo.

Sin embargo, si queremos ir más allá, es crucial que seamos conscientes de las implicaciones de rendimiento y que diseñemos modelos optimizados que aprovechen al máximo las capacidades de Power BI sin comprometer la eficiencia. Con el uso adecuado de las tablas expandidas, podemos crear modelos de datos robustos que permitan un análisis rápido y preciso.

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 Power BI, Rendimiento, 0 comentarios

UPDATE STATISTICS vs sp_updatestats en SQL Server

Como vimos en el pasado artículo, cuando gestionamos bases de datos en SQL Server, uno de los aspectos más importantes es asegurarnos de que las estadísticas están actualizadas. Las estadísticas son fundamentales para que el optimizador de consultas del motor de SQL Server pueda tomar decisiones eficientes sobre cómo ejecutar las consultas. SQL Server nos proporciona varias formas de actualizar estas estadísticas, y dos de las más comunes son el comando UPDATE STATISTICS y el procedimiento almacenado sp_updatestats. En este artículo, vamos a analizar a fondo las diferencias entre ambos, cómo y cuándo utilizarlos, y qué impacto tienen en el rendimiento general de nuestras bases de datos.

Importancia de las estadísticas en SQL Server

Las estadísticas en SQL Server son colecciones de datos que describen la distribución de valores en una o más columnas de una tabla o índice. Estas estadísticas ayudan al optimizador de consultas a estimar la cantidad de filas que devolverá una consulta, lo que a su vez le permite seleccionar los planes de ejecución más eficientes.

Cuando las estadísticas están desactualizadas, el optimizador puede tomar decisiones incorrectas sobre los planes de ejecución, lo que provoca un rendimiento deficiente en las consultas. De ahí la importancia de mantenerlas actualizadas, especialmente en bases de datos con un alto volumen de inserciones, actualizaciones o eliminaciones de datos.

¿Qué es UPDATE STATISTICS?

El comando UPDATE STATISTICS es una instrucción explícita que actualiza las estadísticas para una tabla o índice en particular. Nos ofrece un control muy granular sobre qué estadísticas actualizar y cómo hacerlo. Podemos especificar un conjunto de opciones que nos permiten, por ejemplo, actualizar las estadísticas basadas en un muestreo de datos o una recolección completa de todos los datos.

Sintaxis básica de UPDATE STATISTICS

Para actualizar una estadística en concreto podemos usar el comando UPDATE STATISTICS con la siguiente sintaxis:

Sin embargo, podemos necesitar actualizar todas las estadísticas de una tabla llamada en concreto, en ese caso escribiremos:

Y si queremos actualizar una estadística específica de un índice, podríamos usar el nombre del indice en vez de el nombre de la estadística:

El comando UPDATE STATISTICS también nos permite utilizar varias opciones avanzadas como FULLSCAN, SAMPLE, y RESAMPLE, que determinan el método que SQL Server utiliza para actualizar las estadísticas.

  • FULLSCAN fuerza a SQL Server a leer todas las filas de la tabla para actualizar las estadísticas.
  • SAMPLE nos permite definir un porcentaje o número de filas de la tabla que se usarán para actualizar las estadísticas.
  • RESAMPLE reutiliza las configuraciones de muestreo anteriores para actualizar las estadísticas.

Casos de uso de UPDATE STATISTICS

El uso de UPDATE STATISTICS es apropiado cuando necesitamos un control fino sobre el proceso de actualización de estadísticas. Por ejemplo en bases de datos críticas. En entornos de producción donde el rendimiento es crucial, y necesitamos asegurarnos de que las estadísticas de ciertas tablas grandes o muy consultadas se actualizan con precisión. Otro caso de uso es con tablas con datos muy volátiles. Si tenemos tablas que cambian frecuentemente, como las que contienen datos transaccionales, las estadísticas pueden quedar obsoletas rápidamente. En estos casos, podemos forzar la actualización periódica de las estadísticas con UPDATE STATISTICS.

Limitaciones de UPDATE STATISTICS

La principal desventaja de UPDATE STATISTICS es que requiere que seleccionemos manualmente las tablas o índices que deben ser actualizados. Esto puede ser laborioso en bases de datos con muchas tablas y estadísticas. Además, si no seleccionamos las estadísticas adecuadas, podríamos pasar por alto aquellas que se han desactualizado, lo que afectaría el rendimiento.

¿Qué es sp_updatestats?

sp_updatestats es un procedimiento almacenado proporcionado por SQL Server que actualiza todas las estadísticas en la base de datos actual que hayan sido marcadas como obsoletas. Este procedimiento es mucho más conveniente cuando queremos actualizar las estadísticas de toda la base de datos de forma masiva y automática, sin tener que preocuparnos por cada tabla o índice en particular.

Cómo funciona sp_updatestats

Cuando ejecutamos sp_updatestats, SQL Server examina todas las tablas y determina qué estadísticas deben actualizarse en función de la propiedad modification_counter (contador de modificaciones). Solo las estadísticas que hayan sufrido cambios significativos (según los algoritmos internos de SQL Server) serán actualizadas, lo que optimiza el uso de los recursos del servidor. Para ejecutarlo simplemente usamos:

Al hacerlo, SQL Server actualiza automáticamente las estadísticas necesarias sin necesidad de especificar tablas, índices o configuraciones adicionales.

Casos de uso de sp_updatestats

El uso de sp_updatestats es más apropiado cuando necesitamos realizar una actualización general de las estadísticas en toda la base de datos. Algunos ejemplos de uso incluyen el mantenimiento periódico o las bases de datos con poca actividad.

En bases de datos grandes, donde no queremos revisar manualmente todas las tablas o índices, podemos usar sp_updatestats como parte de nuestras tareas programadas de mantenimiento para asegurarnos de que las estadísticas estén razonablemente actualizadas. Por el contrario, si nuestras bases de datos no experimentan muchos cambios de datos, sp_updatestats puede sernos suficiente para mantener las estadísticas actualizadas sin un impacto significativo en el rendimiento.

Limitaciones de sp_updatestats

Aunque sp_updatestats es conveniente, no nos ofrece el mismo nivel de control que UPDATE STATISTICS. Al ser un procedimiento almacenado, SQL Server decide qué estadísticas actualizar basándose en su propio criterio, lo que puede no ser siempre ideal en situaciones donde necesitamos precisión y control. Además, puede no actualizar todas las estadísticas que en realidad lo necesitan si los cambios en los datos no alcanzan los umbrales establecidos por SQL Server.

Diferencias clave entre UPDATE STATISTICS y sp_updatestats

Como acabamos de ver, los métodos de actualización manual de estadísticas tienen sus diferencias, lo que hace que cada uno sea indicado para un caso concreto. 

Mientras que UPDATE STATISTICS nos permite un control muy específico sobre qué estadísticas actualizar, sp_updatestats es una solución más generalizada.

Por otro lado, sp_updatestats es menos intensivo en términos de recursos, ya que solo actualiza las estadísticas que SQL Server considera desactualizadas, mientras que UPDATE STATISTICS puede ser más intensivo, especialmente si usamos opciones como FULLSCAN.

En cuanto a la sencillez, sp_updatestats es mucho más sencillo de utilizar en escenarios donde no necesitamos un control tan granular sobre las estadísticas. Sin embargo, si necesitamos actualizar solo ciertas tablas o índices críticos, UPDATE STATISTICS es la mejor opción.

Por último, sp_updatestats, gracias a sus características, es más adecuado para procesos automáticos de mantenimiento, mientras que UPDATE STATISTICS puede necesitar más intervención manual, dependiendo del caso de uso.

Cuándo utilizar cada uno

La elección entre UPDATE STATISTICS y sp_updatestats depende de las necesidades específicas de nuestro entorno de base de datos. Si estamos administrando una base de datos crítica con muchas consultas y necesitamos un rendimiento óptimo en tablas específicas, UPDATE STATISTICS con opciones avanzadas como FULLSCAN es la mejor opción. Esto garantiza que las estadísticas se actualicen con precisión y se basen en datos reales y completos pero tendrá un alto coste en recursos.

Por otro lado, si buscamos un enfoque menos manual y necesitamos actualizar las estadísticas de toda la base de datos sin dedicar demasiado tiempo a configurar el proceso, sp_updatestats es una opción rápida y eficaz, especialmente cuando se utiliza en combinación con tareas programadas de mantenimiento.

Conclusión

Mantener las estadísticas actualizadas en SQL Server es una parte fundamental del mantenimiento de la base de datos para asegurar el rendimiento óptimo de las consultas. Mientras que UPDATE STATISTICS nos da un control detallado sobre qué estadísticas actualizar y cómo hacerlo, sp_updatestats ofrece una solución más automatizada y general para mantener la base de datos en buen estado.

La clave está en conocer cuándo utilizar cada enfoque. Si gestionamos bases de datos con altos volúmenes de datos o con requisitos específicos de rendimiento, optar por UPDATE STATISTICS puede ser lo más adecuado. Sin embargo, en escenarios de mantenimiento general, sp_updatestats nos proporciona una forma conveniente y eficaz de mantener las estadísticas actualizadas sin esfuerzo manual adicional. Como siempre, es fundamental realizar pruebas y monitorear el impacto de estas operaciones en el rendimiento de nuestras consultas y en el uso de los recursos del sistema.

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