Modelado físico relacional de bases de datos

El mantenimiento y monitoreo son aspectos clave para garantizar el rendimiento, la disponibilidad y la integridad de una base de datos a lo largo del tiempo. Este módulo se centra en las mejores prácticas, herramientas y estrategias para gestionar bases de datos en producción.


Tuning de Base de Datos

El tuning consiste en ajustar la configuración y diseño de la base de datos para mejorar el rendimiento.

Identificar Cuellos de Botella

Usa herramientas específicas para analizar el rendimiento:

  • MySQL: EXPLAIN, SHOW STATUS, Performance Schema.
  • PostgreSQL: EXPLAIN ANALYZE, pg_stat_activity.

Optimización de Consultas

Revisa las consultas más lentas:

  • Evita usar SELECT * si no necesitas todas las columnas.
  • Usa índices en columnas que frecuentemente aparecen en WHERE, JOIN o ORDER BY.
  • Ejemplo:
    1SELECT nombre FROM Productos WHERE precio > 100;
    Es más eficiente si existe un índice en la columna precio:
    1CREATE INDEX idx_precio ON Productos(precio);

Ajustes de Configuración

  • Aumenta el tamaño de la memoria caché si las consultas acceden frecuentemente a los mismos datos.
  • Ajusta el número de conexiones simultáneas para soportar la carga esperada.

Respaldo y Recuperación

Un buen plan de respaldo y recuperación garantiza que los datos estén protegidos frente a fallos.

Tipos de Respaldo

  1. Respaldo Completo: Copia toda la base de datos.
1mysqldump -u usuario -p basededatos > respaldo.sql
2--🔹 Si necesitas incluir la estructura + datos de todas las bases de datos:
3mysqldump -u usuario -p --all-databases > respaldo_completo.sql
  1. Respaldo Incremental: Copia solo los cambios realizados desde el último respaldo completo.

Ideal para bases de datos grandes.

1-- MySQL por defecto no soporta backups incrementales con mysqldump. Para hacer respaldos incrementales necesitas habilitar el log binario y copiarlo.
2
3--✅ Opción 1: Usando logs binarios (backup incremental manual)
4-- 1 Asegúrate de que el log binario está habilitado en my.cnf:
5   [mysqld]
6   server-id=1
7   log_bin=mysql-bin
8
9-- 2 Haz un respaldo completo con mysqldump.
10
11-- 3 Luego copia los binlogs desde el último respaldo:
12mysqlbinlog mysql-bin.000001 > cambios_incrementales.sql
13-- Puedes automatizar esto para solo copiar los nuevos binlogs desde cierto punto.
  1. Respaldo Diferencial: Copia los cambios desde el último respaldo completo, pero no elimina datos antiguos.

Estrategias de Recuperación

  1. Recuperar de un respaldo completo:
1`mysql -u usuario -p basededatos < respaldo_completo.sql`
2
3-- Asegúrate de que basededatos exista (o créala antes si no está en el .sql):
4CREATE DATABASE basededatos;
  1. Puntos de Restauración (PostgreSQL): Usa archivos WAL para volver a un punto específico en el tiempo:
    1pg_restore -d Tienda -v respaldo.tar

Archiving y Rotación

Para bases de datos que crecen rápidamente, es importante archivar y rotar datos antiguos.

Archivar Datos Antiguos

  • Mueve registros antiguos a una tabla separada o un sistema de almacenamiento externo.
  • Ejemplo:
    1INSERT INTO Ventas_Historicas
    2SELECT * FROM Ventas WHERE fecha < '2023-01-01';
    3
    4DELETE FROM Ventas WHERE fecha < '2023-01-01';

Automatización de Archiving

  • Configura tareas programadas para mover datos periódicamente.
  • Ejemplo en MySQL:
1CREATE EVENT ArchivarVentas
2ON SCHEDULE EVERY 1 MONTH
3DO
4BEGIN
5    INSERT INTO Ventas_Historicas
6    SELECT * FROM Ventas WHERE fecha < DATE_SUB(CURDATE(), INTERVAL 1 YEAR);
7    
8    DELETE FROM Ventas WHERE fecha < DATE_SUB(CURDATE(), INTERVAL 1 YEAR);
9END;
10-- ⚠️ Asegúrate de que el Event Scheduler está activado:
11SET GLOBAL event_scheduler = ON;

Monitoreo

El monitoreo permite identificar problemas de rendimiento o disponibilidad antes de que afecten al sistema.

Métricas Clave

  1. Uso de CPU y Memoria:
    • Verifica que el SGBD no esté consumiendo recursos excesivos.
  2. Conexiones Simultáneas:
    • Asegúrate de que el número de conexiones no exceda el límite configurado.
  3. Tiempos de Consulta:
    • Monitorea consultas que tardan más de lo esperado.
    • Ejemplo en MySQL:
      1SHOW FULL PROCESSLIST;

Herramientas de Monitoreo

  • MySQL Workbench: Permite analizar consultas y métricas.
  • pgAdmin: Incluye herramientas para monitorear PostgreSQL.
  • Prometheus y Grafana: Soluciones avanzadas para monitorear múltiples bases de datos.

Actualización de la Base de Datos

Actualizar la estructura o el esquema de una base de datos requiere planificación para evitar interrupciones.

Estrategia de Actualización

  1. Crear una copia de respaldo antes de los cambios.
  2. Implementar los cambios en un entorno de pruebas.
  3. Aplicar los cambios gradualmente en producción.

Ejemplo de Cambio de Esquema

Supongamos que necesitas agregar una columna a la tabla Clientes:

1ALTER TABLE Clientes ADD COLUMN telefono VARCHAR(15);

Caso Práctico

Problema: Una base de datos de un sistema de e-commerce se ha vuelto lenta debido al gran volumen de ventas.

Pasos para resolverlo:

  1. Identificar consultas lentas:
1EXPLAIN SELECT * FROM Ventas WHERE fecha BETWEEN '2023-01-01' AND '2023-12-31';
  1. Optimizar consultas:
    • Crear un índice en la columna fecha:
1CREATE INDEX idx_fecha ON Ventas(fecha);
  1. Archivar datos antiguos:
    • Mover datos de ventas anteriores a 2023 a una tabla histórica:
1INSERT INTO Ventas_Historicas
2SELECT * FROM Ventas WHERE fecha < '2023-01-01';
3DELETE FROM Ventas WHERE fecha < '2023-01-01';
  1. Monitorear consultas después de los cambios:
1EXPLAIN SELECT * FROM Ventas WHERE fecha BETWEEN '2024-01-01' AND '2024-12-31';

Resumen del Módulo 6

  1. Tuning: Ajusta el diseño y la configuración para mejorar el rendimiento.
  2. Respaldos: Define una estrategia de respaldo y recuperación adecuada.
  3. Archiving: Mueve datos antiguos para liberar espacio en las tablas principales.
  4. Monitoreo: Utiliza herramientas y analiza métricas clave para detectar problemas.
  5. Actualización: Realiza cambios en el esquema de manera segura y controlada.
  • Loading...