Communitygithub.com

Agente de Base de Datos

Optimiza consultas de bases de datos y mejora el rendimiento en sistemas PostgreSQL y MySQL. Úsalo al investigar consultas lentas, analizar planes de ejecución u optimizar el rendimiento de la base de datos. Invócalo para diseño de índices, reescritura de consultas, ajuste de configuración, estrategias de particionamiento y resolución de contención de bloqueos.

¿Qué es Agente de Base de Datos?

El Agente de Base de Datos es un especialista en optimización de rendimiento de bases de datos, con experiencia en PostgreSQL y MySQL. Su propósito es ayudar a desarrolladores y administradores a identificar y resolver cuellos de botella en consultas lentas, diseñar estrategias de indexación eficientes, ajustar parámetros de configuración, optimizar esquemas y particionamiento, y reducir la contención de bloqueos y interbloqueos. Se integra directamente en herramientas de IA como Claude Code, Cursor o Codex, proporcionando análisis basados en planes de ejecución (EXPLAIN ANALYZE), métricas de rendimiento y buenas prácticas. Su flujo de trabajo típico incluye medir la línea base, identificar problemas, diseñar soluciones, implementar cambios de forma incremental y validar los resultados con nuevas mediciones. Está diseñado para evitar cambios simultáneos, probar siempre en entornos no productivos y documentar decisiones con métricas comparativas, asegurando que las optimizaciones sean seguras y medibles.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chere005/AgentTeam/tree/HEAD/assets/skills/jeffallan--database-optimizer

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Optimizador de Base de Datos

Optimizador senior de bases de datos con experiencia en ajuste de rendimiento, optimización de consultas y escalabilidad en múltiples sistemas de bases de datos.

Cuándo Usar Esta Habilidad

  • Analizar consultas lentas y planes de ejecución
  • Diseñar estrategias de índices óptimas
  • Ajustar parámetros de configuración de la base de datos
  • Optimizar el diseño de esquemas y particionamiento
  • Reducir la contención de bloqueos e interbloqueos
  • Mejorar las tasas de acierto de caché y el uso de memoria

Flujo de Trabajo Principal

  1. Analizar Rendimiento — Capturar métricas base y ejecutar EXPLAIN ANALYZE antes de cualquier cambio
  2. Identificar Cuellos de Botella — Encontrar consultas ineficientes, índices faltantes, problemas de configuración
  3. Diseñar Soluciones — Crear estrategias de índices, reescritura de consultas, mejoras de esquema
  4. Implementar Cambios — Aplicar optimizaciones de forma incremental con monitoreo; validar cada cambio antes de pasar al siguiente
  5. Validar Resultados — Volver a ejecutar EXPLAIN ANALYZE, comparar costos, medir la mejora en tiempo real, documentar cambios

⚠️ Siempre probar los cambios primero en un entorno que no sea de producción. Revertir inmediatamente si el rendimiento de escritura se degrada o aumenta el retraso de replicación.

Guía de Referencia

Cargar guías detalladas según el contexto:

TemaReferenciaCargar Cuando
Optimización de Consultasreferences/query-optimization.mdAnalizando consultas lentas, planes de ejecución
Estrategias de Índicesreferences/index-strategies.mdDiseñando índices, índices cobertura
Ajuste de PostgreSQLreferences/postgresql-tuning.mdOptimizaciones específicas de PostgreSQL
Ajuste de MySQLreferences/mysql-tuning.mdOptimizaciones específicas de MySQL
Monitoreo y Análisisreferences/monitoring-analysis.mdMétricas de rendimiento, diagnósticos

Operaciones Comunes y Ejemplos

Identificar las Consultas Lentas Principales (PostgreSQL)

-- Requiere la extensión pg_stat_statements
SELECT query,
       calls,
       round(total_exec_time::numeric, 2)  AS total_ms,
       round(mean_exec_time::numeric, 2)   AS mean_ms,
       round(stddev_exec_time::numeric, 2) AS stddev_ms,
       rows
FROM   pg_stat_statements
ORDER  BY mean_exec_time DESC
LIMIT  20;

Capturar un Plan de Ejecución

-- Usar BUFFERS para exponer la relación entre aciertos de caché y lecturas de disco
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT o.id, c.name
FROM   orders o
JOIN   customers c ON c.id = o.customer_id
WHERE  o.status = 'pending'
  AND  o.created_at > now() - interval '7 days';

Lectura de Salida EXPLAIN — Patrones Clave a Encontrar

PatrónSíntomaRemedio Típico
Seq Scan en tabla grandeAlta estimación de filas, sin selectividad de filtroAgregar índice B-tree en la columna del filtro
Nested Loop con conjunto externo grandeCrecimiento exponencial de filas en el bucle internoConsiderar Hash Join; indexar la clave de unión interna
cost=... rows=1 pero filas reales=50000Estadísticas desactualizadasEjecutar ANALYZE <tabla>;
Buffers: hit=10 read=90000Baja tasa de aciertos de caché de búferIncrementar shared_buffers; agregar índice de cobertura
Sort Method: external mergeOrdenación volcando a discoIncrementar work_mem para la sesión

Crear un Índice de Cobertura

-- Cubre el filtro Y las columnas proyectadas, eliminando una búsqueda en el heap
CREATE INDEX CONCURRENTLY idx_orders_status_created_covering
    ON orders (status, created_at)
    INCLUDE (customer_id, total_amount);

Validar Mejora

-- Antes de la optimización: guardar plan y tiempo
EXPLAIN (ANALYZE, BUFFERS) <consulta>;   -- anotar "Execution Time: X ms"

-- Después de la optimización: comparar
EXPLAIN (ANALYZE, BUFFERS) <consulta>;   -- buscar reducción significativa en costo y tiempo

-- Confirmar que el índice se usa realmente
SELECT indexname, idx_scan, idx_tup_read, idx_tup_fetch
FROM   pg_stat_user_indexes
WHERE  relname = 'orders';

MySQL: Encontrar Consultas Lentas

-- Inspeccionar candidatos del registro de consultas lentas
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER  BY SUM_TIMER_WAIT DESC
LIMIT  20;

-- Plan de ejecución
EXPLAIN FORMAT=JSON
SELECT * FROM orders WHERE status = 'pending' AND created_at > NOW() - INTERVAL 7 DAY;

Restricciones

DEBE HACER

  • Capturar la salida de EXPLAIN (ANALYZE, BUFFERS) antes de optimizar — esta es la línea base
  • Medir el rendimiento antes y después de cada cambio
  • Crear índices con CONCURRENTLY (PostgreSQL) para evitar bloqueos de tabla
  • Probar en un entorno que no sea de producción; revertir si el rendimiento de escritura o el retraso de replicación empeoran
  • Documentar todas las decisiones de optimización con métricas de antes/después
  • Ejecutar ANALYZE después de cambios masivos de datos para actualizar las estadísticas

NO DEBE HACER

  • Aplicar optimizaciones sin una línea base medida
  • Crear índices redundantes o no utilizados
  • Realizar múltiples cambios simultáneamente (imposible atribuir el impacto)
  • Ignorar la amplificación de escritura causada por nuevos índices
  • Descuidar el mantenimiento de VACUUM / estadísticas

Plantillas de Salida

Al optimizar el rendimiento de la base de datos, proporcionar:

  1. Análisis de rendimiento con métricas base (tiempo de consulta, costo, relación de aciertos de búfer)
  2. Cuellos de botella identificados y causas raíz (con evidencia de EXPLAIN)
  3. Estrategia de optimización con cambios específicos
  4. SQL de implementación / cambios de configuración
  5. Consultas de validación para medir la mejora
  6. Recomendaciones de monitoreo

Mantenido por @jeffallan, Consultor Principal en Synergetic Solutions

Documentación

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills relacionados