Database Strategy

Database Strategy

Database Strategy: blog Technical Leader sobre bases de datos y Data Warehouse mission-critical. 30 años en banca, correos, seguros, telco y sector público.

La diferencia entre un sistema que funciona
y uno que realmente impulsa el negocio no es suerte.

Es comprensión profunda de los planes de ejecución.
Es control de privilegios y seguridad de los datos.
Es modelado de datos alineado con los objetivos empresariales.
Es rendimiento que se mantiene cuando la carga aumenta.

Las bases de datos son el núcleo operativo del ecosistema digital de cualquier empresa.
Sostienen procesos críticos, habilitan decisiones basadas en datos y determinan la velocidad y eficiencia operativa.

Dentro del Motor es el espacio donde analizo lo que ocurre bajo el capó de PostgreSQL, Oracle y MySQL: performance tuning, seguridad, arquitectura y decisiones técnicas aplicables en entornos reales.

Porque en el mundo data-driven actual, las bases de datos no son simples componentes de software.
Son activos estratégicos que influyen en la competitividad, la fiabilidad y el crecimiento sostenible.

Últimos artículos

La IA muestra el síntoma. El board pregunta por la causa.
Liderazgo técnico y proyectos

La IA muestra el síntoma. El board pregunta por la causa.

Datadog y Dynatrace muestran síntomas, no causas. Cómo explicar al board por qué la observability moderna no basta sin un lector competente.

El reinicio lo resolvió. El problema sigue ahí.
Liderazgo técnico y proyectos

El reinicio lo resolvió. El problema sigue ahí.

Un incident que se cierra sin causa reconstruida no es un episodio aislado. Cómo leer AWR, ASH y change log en frío antes de que llegue el segundo fallo.

Más recursos, misma causa
Liderazgo técnico y proyectos

Más recursos, misma causa

Por qué añadir CPU, RAM o IOPS rara vez resuelve un database mission-critical que va lento — y qué mirar antes de firmar el presupuesto.

128 MB en una máquina de 32 GB: el buffer pool de InnoDB que nadie había tocado
MySQL

128 MB en una máquina de 32 GB: el buffer pool de InnoDB que nadie había tocado

Latencia alta en MySQL 8.0: 32 GB de RAM y buffer pool a 128 MB por defecto. Diagnóstico, ajuste y warm-up: de 45ms a 3ms sin reescribir una sola query.

El doctor completamente loco: un Commodore 64, una puerta cerrada y el oficio de comprender
Liderazgo técnico y proyectos

El doctor completamente loco: un Commodore 64, una puerta cerrada y el oficio de comprender

Un Commodore 64, un programa modificado para insultar al padre y una puerta cerrada con llave: cómo empieza una carrera de 30 años en ingeniería de bases de datos.

El sábado noche que nadie quiere: migración Oracle 12.2 a 21c en cuatro horas
Oracle

El sábado noche que nadie quiere: migración Oracle 12.2 a 21c en cuatro horas

Doce terabytes, cuatro horas de ventana. Cómo combinar Transportable Tablespaces y RMAN incremental para migrar Oracle 12.2 a 21c con downtime mínimo.

La llamada de las 8 y 40: recovery de un Galera Cluster con dos nodos caídos
MySQL

La llamada de las 8 y 40: recovery de un Galera Cluster con dos nodos caídos

Cómo recuperar un Galera Cluster a 3 nodos cuando caen dos nodos en cascada: diagnóstico, SST vs IST, bootstrap de emergencia y runbook operativo.

ETL Oracle: de 4 horas a 25 minutos con staging tables, MERGE y DML paralelo
Data Warehouse

ETL Oracle: de 4 horas a 25 minutos con staging tables, MERGE y DML paralelo

Un batch nocturno que se pasaba de la ventana. AWR, row-by-row, COMMIT frecuente y cero paralelismo. Cómo lo resolvimos con staging, MERGE y parallel DML.

El informe del lunes por la mañana: lag de réplica MySQL y por qué Seconds_Behind_Master miente
MySQL

El informe del lunes por la mañana: lag de réplica MySQL y por qué Seconds_Behind_Master miente

Cuatro horas de lag en un sistema logístico: cómo diagnosticamos el problema, por qué Seconds_Behind_Master engaña y qué cambios lo resolvieron.

El ticket decía 'actualiza MySQL y apaga el servicio'
MySQL

El ticket decía 'actualiza MySQL y apaga el servicio'

Workflow real de patching MySQL 8.0.34→8.0.45 en RHEL 8: vistas inválidas, GTID, verificación de réplica y upgrade RPM. Lo que el ticket de cuatro líneas no contaba.

La frustración de Alberto: Oracle Text y la búsqueda full-text en un archivo legal de treinta años
Oracle

La frustración de Alberto: Oracle Text y la búsqueda full-text en un archivo legal de treinta años

Cómo tres tipos de índice Oracle Text transformaron búsquedas de 90 segundos en menos de 700 ms en un archivo legal con décadas de documentos.

Tres triggers, un job nocturno y 1.247 pólizas huérfanas: ASSERTION en Oracle 26ai
Oracle

Tres triggers, un job nocturno y 1.247 pólizas huérfanas: ASSERTION en Oracle 26ai

Oracle 26ai implementa CREATE ASSERTION, la restricción cross-tabla que SQL-92 prometía desde hace décadas. Sintaxis, comparación con triggers y casos reales en seguros.

La llamada del martes por la mañana: swap al 100% en InnoDB Cluster y cómo join_buffer_size multiplica el problema
MySQL

La llamada del martes por la mañana: swap al 100% en InnoDB Cluster y cómo join_buffer_size multiplica el problema

Diagnóstico en producción de un cluster MySQL InnoDB con swap saturado: cómo join_buffer_size a 2 GB por thread colapsa un nodo con 157 GB de RAM.

La pausa del almuerzo que retrasó el go-live: Data Governance en el DWH
Data Warehouse

La pausa del almuerzo que retrasó el go-live: Data Governance en el DWH

Qué falta cuando un DWH está 'técnicamente listo': data ownership, calidad continua, TDE en Oracle 19c y Data Catalog. Caso real en sector asegurador.

ORA-00205 a las tres de la madrugada: entender los archivos críticos de Oracle antes de necesitarlos
Oracle

ORA-00205 a las tres de la madrugada: entender los archivos críticos de Oracle antes de necesitarlos

Diagnóstico guiado de ORA-00205 en plena emergencia nocturna: fase MOUNT, control file, SPFILE, redo log. Método práctico para DBA Oracle de guardia.

Replicación lógica en PostgreSQL: las preguntas de un colega que aclaran el tema
PostgreSQL

Replicación lógica en PostgreSQL: las preguntas de un colega que aclaran el tema

Replicación lógica PostgreSQL explicada con las preguntas de un colega: migración cross-version, CDC hacia data warehouse, configuración paso a paso.

De rivales a co-autores: cómo Booch, Rumbaugh y Jacobson inventaron UML (y lo que queda hoy)
Liderazgo técnico y proyectos

De rivales a co-autores: cómo Booch, Rumbaugh y Jacobson inventaron UML (y lo que queda hoy)

La historia de los Three Amigos de UML y RUP: cómo Booch, Rumbaugh y Jacobson, de rivales, unificaron el object-oriented modeling. Y lo que queda hoy.

Oracle 19c, 21c, 23ai, 26ai: la reescritura silenciosa de los dominios de valores
Oracle

Oracle 19c, 21c, 23ai, 26ai: la reescritura silenciosa de los dominios de valores

Siete años de Oracle a través de las enumeraciones: del CHECK del 19c a los SQL Domains del 23ai, hasta las Assertions del 26ai. Migración aseguradora.

Enumeraciones en Oracle: veinte años de workaround, y el camino que se abrió con la 23ai
Oracle

Enumeraciones en Oracle: veinte años de workaround, y el camino que se abrió con la 23ai

Oracle nunca tuvo ENUM nativo. CHECK constraints, lookup tables y SQL Domains 23ai: tres caminos, un caso real banking, y qué llegará con la 26ai.

ENUM en PostgreSQL: cuando la elección compensa, y cuando se vuelve en tu contra
PostgreSQL

ENUM en PostgreSQL: cuando la elección compensa, y cuando se vuelve en tu contra

PostgreSQL ENUM vs CHECK vs tabla lookup: ALTER TYPE ADD VALUE no cuesta nada, eliminar un valor cuesta una migración. Tres caminos, un caso telco real.

ENUM en MySQL: cuando te simplifica la vida y cuando te complica los días
MySQL

ENUM en MySQL: cuando te simplifica la vida y cuando te complica los días

MySQL ENUM vs CHECK constraint vs tabla de lookup: tres vías para modelar una enumeración. Ventajas, límites y caso real de seguimiento de envíos.

Cuando un índice hace más mal que bien: limpiar PostgreSQL del despilfarro
PostgreSQL

Cuando un índice hace más mal que bien: limpiar PostgreSQL del despilfarro

PostgreSQL: encontrar y eliminar índices no usados con pg_stat_user_indexes. Caso real: una tabla con 15 índices, 8 nunca usados.

5 reglas que he visto funcionar en los equipos de proyecto que aguantan
Liderazgo técnico y proyectos

5 reglas que he visto funcionar en los equipos de proyecto que aguantan

Gestión de proyectos: 5 reglas observadas en equipos que aguantan bajo presión. Psychological safety, bus factor, outcome vs output, knowledge transfer.

Tres data marts, tres verdades sobre las ventas: el bus matrix como terreno común
Data Warehouse

Tres data marts, tres verdades sobre las ventas: el bus matrix como terreno común

Bus matrix de Kimball para alinear data marts aislados: conformed dimensions, procesos de negocio y ventas comparables. Caso real grupo asegurador.

Antes de actualizar MySQL: las cifras que el cliente te pide y cómo encontrarlas de verdad
MySQL

Antes de actualizar MySQL: las cifras que el cliente te pide y cómo encontrarlas de verdad

MySQL 8.0 pre-upgrade assessment: medir tamaños, crecimiento, tiempos de backup y restore con information_schema. Cifras reales para planificar.

Oracle de on-premises a cloud: estrategia, planificación y cutover
Oracle

Oracle de on-premises a cloud: estrategia, planificación y cutover

Migración Oracle 19c on-premises a OCI: 2 TB con RAC y Data Guard. Licensing BYOL, Data Pump, cutover nocturno — crónica real.

pg_stat_statements: lo primero que instalar en cualquier PostgreSQL
PostgreSQL

pg_stat_statements: lo primero que instalar en cualquier PostgreSQL

PostgreSQL pg_stat_statements: la extensión de diagnóstico de queries a instalar primero. Encontrar las tres queries que consumen el 80%.

mysqldump vs mysqlpump vs mydumper: el backup que no te deja dormir
MySQL

mysqldump vs mysqlpump vs mydumper: el backup que no te deja dormir

Backup MySQL: mysqldump vs mydumper vs mysqlpump en base de datos de 60 GB. Tiempos reales de dump y restore, paralelismo y decisión arquitectónica.

Partitioning en el DWH: cuando 3 años de datos pesan demasiado
Data Warehouse

Partitioning en el DWH: cuando 3 años de datos pesan demasiado

Range partitioning en fact table de 800M filas: de queries trimestrales de 12 minutos a 40 segundos. Implementación mensual, exchange e índices locales.

Binary log en MySQL: qué son, cómo gestionarlos y cuándo puedes borrarlos
MySQL

Binary log en MySQL: qué son, cómo gestionarlos y cuándo puedes borrarlos

MySQL binary log: gestión, retención y point-in-time recovery. Caso real de servidor con disco al 95% y 180 GB de binlog en seis meses.

VACUUM y autovacuum: por qué PostgreSQL necesita que alguien limpie
PostgreSQL

VACUUM y autovacuum: por qué PostgreSQL necesita que alguien limpie

PostgreSQL VACUUM y autovacuum: diagnóstico de bloat en base de datos de 200 GB, lectura de pg_stat_user_tables y tuning sin desactivar nada.

AI Manager y Project Management: cuando la inteligencia artificial entra en los proyectos
Liderazgo técnico y proyectos

AI Manager y Project Management: cuando la inteligencia artificial entra en los proyectos

AI Manager: el rol que gobierna el impacto de la inteligencia artificial sobre arquitecturas, procesos y personas. Reflexiones desde 30 años en IT.

Pagos a 60-90-120 días: la normalidad italiana que no existe en Europa
Liderazgo técnico y proyectos

Pagos a 60-90-120 días: la normalidad italiana que no existe en Europa

Pagos a 60-90-120 días en consultoría IT italiana: comparación con las reglas europeas. DSO, directiva 2011/7/UE y estrategias para freelancers IT.

Bici vs Coche en Roma: la mañana que me abrió los ojos
Liderazgo técnico y proyectos

Bici vs Coche en Roma: la mañana que me abrió los ojos

Pendolarismo en Roma: Brompton eléctrica vs coche. 18 minutos vs 50, 35€ de aparcamiento ahorrados. La elección de movilidad sostenible, datos reales.

Smart working en consultoría IT: los números que nadie quiere mirar
Liderazgo técnico y proyectos

Smart working en consultoría IT: los números que nadie quiere mirar

Smart working en consultoría IT: análisis económico y estratégico del trabajo remoto. Números reales, KPIs, presenteísmo y productividad vs oficina.

Oracle en Linux: los parámetros del kernel que nadie configura
Oracle

Oracle en Linux: los parámetros del kernel que nadie configura

Oracle 19c en Linux: tuning del kernel para rendimiento real. Huge Pages, THP, swappiness, I/O scheduler, ulimit — números antes/después.

Galera Cluster con 3 nodos: cómo resolví un incidente de disponibilidad en MySQL
MySQL

Galera Cluster con 3 nodos: cómo resolví un incidente de disponibilidad en MySQL

MySQL Galera Cluster de 3 nodos para alta disponibilidad: replicación síncrona, quórum, SST/IST. Configuración contra el single point of failure.

Roles y usuarios en PostgreSQL: por qué todo es (solo) un ROLE
PostgreSQL

Roles y usuarios en PostgreSQL: por qué todo es (solo) un ROLE

PostgreSQL ROLE: usuarios y roles son el mismo objeto. Modelo mental, GRANT, NOINHERIT y construir un usuario read-only realmente mantenible.

AWR, ASH y los 10 minutos que salvaron un go-live
Oracle

AWR, ASH y los 10 minutos que salvaron un go-live

Tuning Oracle 19c con AWR y ASH: encontrar un full table scan oculto en un procedimiento almacenado en 10 minutos, antes de un go-live.

Cuando el caos se convierte en método: AI y GitHub para gestionar un proyecto que nadie quería tocar
Liderazgo técnico y proyectos

Cuando el caos se convierte en método: AI y GitHub para gestionar un proyecto que nadie quería tocar

Gestión de proyectos con AI y GitHub: transformar un proyecto caótico en workflow medible con issue tracking, code review e inteligencia artificial.

Usuarios, roles y privilegios en Oracle: por qué GRANT ALL nunca es la respuesta
Oracle

Usuarios, roles y privilegios en Oracle: por qué GRANT ALL nunca es la respuesta

Seguridad Oracle: rediseño del modelo GRANT con roles personalizados y Unified Audit, aplicando el mínimo privilegio. Caso real con SQL listo.

Liderazgo técnico y proyectos

Standup meeting: por qué solo funcionan si duran 15 minutos

Standup meeting Scrum: por qué solo los 15 minutos los hacen funcionar. Timeboxing, parking lot y reglas prácticas del daily meeting que aguantan.

Jerarquías desbalanceadas: cuando el cliente no tiene padre y el grupo no tiene abuelo
Data Warehouse

Jerarquías desbalanceadas: cuando el cliente no tiene padre y el grupo no tiene abuelo

Ragged hierarchy en data warehouse: balanceo de jerarquías desbalanceadas con la técnica de self-parenting. Drill-down correcto en clientes y grupos.

Usuarios MySQL: por qué 'mario' y 'mario'@'localhost' no son la misma persona
MySQL

Usuarios MySQL: por qué 'mario' y 'mario'@'localhost' no son la misma persona

MySQL usuarios y hosts: 'mario' y 'mario'@'localhost' son entidades distintas. Modelo de autenticación MySQL/MariaDB, errores comunes y GRANTs.

La técnica del Sí-Y: cómo evité una discusión que estaba a punto de estallar
Liderazgo técnico y proyectos

La técnica del Sí-Y: cómo evité una discusión que estaba a punto de estallar

La técnica Yes-And del teatro de improvisación aplicada a la gestión de conflictos en equipos IT. Caso real de una reunión que iba a estallar.

Cuando un LIKE '%valor%' ralentiza todo: un caso real de optimización PostgreSQL
PostgreSQL

Cuando un LIKE '%valor%' ralentiza todo: un caso real de optimización PostgreSQL

Optimización PostgreSQL: LIKE '%valor%' genera full scan. Uso de pg_trgm e índice GIN para convertir una búsqueda wildcard en lookup rápido.

4 millones de euros, dos multinacionales, cero software: historia real de un fracaso anunciado
Liderazgo técnico y proyectos

4 millones de euros, dos multinacionales, cero software: historia real de un fracaso anunciado

Caso real de gestión de proyectos: cliente asegurador gasta 4 millones en consultoría IT y obtiene cero software funcionando. Lecciones vendor lock-in.

Oracle Partitioning: cuando 2 mil millones de filas ya no caben en una query
Oracle

Oracle Partitioning: cuando 2 mil millones de filas ya no caben en una query

Oracle Partitioning en tabla de 2 mil millones de filas: range, interval, partition pruning, índices locales. De horas a segundos.

De single instance a Data Guard: el día en que el CEO entendió el DR
Oracle

De single instance a Data Guard: el día en que el CEO entendió el DR

Oracle Data Guard 19c: migración desde single instance tras una caída de 6 horas. Arquitectura DR, primary/standby, switchover automático.

SCD Tipo 2: la historia que el negocio no sabía que necesitaba
Data Warehouse

SCD Tipo 2: la historia que el negocio no sabía que necesitaba

SCD Tipo 2 en data warehouse: historizar dimensiones con claves subrogadas y fechas de validez. Caso real: dimensión clientes que evoluciona en el tiempo.

MySQL multi-instancia: un ticket, un CSV y el muro de secure-file-priv
MySQL

MySQL multi-instancia: un ticket, un CSV y el muro de secure-file-priv

MySQL multi-instancia en Linux: exportar un CSV con INTO OUTFILE bloqueado por secure-file-priv. Conexión por socket Unix y workaround desde shell.

EXPLAIN ANALYZE no basta: como leer realmente un plan de ejecucion PostgreSQL
PostgreSQL

EXPLAIN ANALYZE no basta: como leer realmente un plan de ejecucion PostgreSQL

PostgreSQL EXPLAIN ANALYZE: leer un plan de ejecución, detectar nested loop costosos y ANALYZE sobre estadísticas viejas. Caso real con 2M filas.

Granularidad equivocada: cuando la fact table no responde las preguntas correctas
Data Warehouse

Granularidad equivocada: cuando la fact table no responde las preguntas correctas

Data warehouse: la granularidad de la fact table determina qué preguntas puedes responder. Errores frecuentes y su impacto en el modelo dimensional.

Disco lleno en un cluster MySQL: binary logs, Group Replication y una migración que no admite errores
MySQL

Disco lleno en un cluster MySQL: binary logs, Group Replication y una migración que no admite errores

MySQL Group Replication de 3 nodos: migración de binary logs a un volumen dedicado sin perder el quórum. Caso real con filesystem al 92%.