Documentación de Base de Datos - Calmia Nexus¶
Este directorio contiene documentación técnica sobre la base de datos PostgreSQL del proyecto Calmia Nexus.
Índice de Documentos¶
Architecture Decision Records (ADRs)¶
| ADR | Título | Estado | Fecha |
|---|---|---|---|
| ADR-002 | Eliminación de Índices Duplicados | Propuesto | 2026-02-01 |
| ADR-003 | Eliminación de Índices No Utilizados en McpRequestLogs | Propuesto | 2026-02-01 |
Informes de Análisis¶
| Documento | Descripción |
|---|---|
| RemoteAgents-Query-Analysis.md | Análisis de patrones de consulta en tabla RemoteAgents |
| McpRequestLogs-Unused-Indexes-Report.md | Identificación de índices no utilizados en McpRequestLogs |
| McpRequestLogs-Index-Usage-Report.md | Uso de índices en código fuente |
| McpRequestLogs-Risk-Assessment.md | Evaluación de riesgos de eliminación de índices |
Informes de Validación¶
| Documento | Descripción |
|---|---|
| RemoveDuplicateIndexes-Validation-Report.md | Validación de migración de índices duplicados |
Resumen de Optimizaciones de Base de Datos¶
Fecha: 2026-02-01¶
1. Eliminación de Índices Duplicados (ADR-002)¶
Tablas afectadas: Organizations, Users, ProjectAgentPaths, WellnessRecords
| Índice Eliminado | Tabla | Razón |
|---|---|---|
IX_Organizations_Slug |
Organizations | Duplicado de constraint UNIQUE |
IX_Users_Email |
Users | Duplicado de constraint UNIQUE |
IX_ProjectAgentPaths_ProjectId_RemoteAgentId |
ProjectAgentPaths | Duplicado de constraint UNIQUE |
IX_WellnessRecords_UserId_RecordDate |
WellnessRecords | Duplicado de constraint UNIQUE |
Impacto: - INSERT/UPDATE: +15-25% más rápido - Espacio: ~50% menos en índices afectados
2. Eliminación de Índices No Utilizados en McpRequestLogs (ADR-003)¶
Tabla afectada: McpRequestLogs
| Categoría | Índices Eliminados |
|---|---|
| Simples | ClientId, CorrelationId, SessionId, Method, ToolName |
| Compuestos | ReceivedAt_Status, ToolName_ReceivedAt, Method_Status |
| Especiales | RequestParams_GIN |
| Parciales | Status, ErrorCode, DurationMs, ReceivedAt |
Total: 11 índices eliminados, 3 mantenidos (PK + 2 FK)
Impacto: - INSERT: +45-60% más rápido - UPDATE: +40-50% más rápido - Espacio: ~800 KB recuperados
Migraciones Pendientes¶
| Migración | Descripción | Estado |
|---|---|---|
20260201120000_OptimizeRemoteAgentsIndexes |
Optimización de índices en RemoteAgents | Pendiente |
20260201130000_RemoveDuplicateIndexes |
Eliminación de índices duplicados | Pendiente |
20260201140000_RemoveUnusedMcpRequestLogsIndexes |
Eliminación de índices en McpRequestLogs | Pendiente |
Aplicar Migraciones¶
# Aplicar todas las migraciones pendientes
dotnet ef database update --project Orchestrator/src/Orchestrator.Api
# Aplicar migración específica
dotnet ef database update 20260201140000_RemoveUnusedMcpRequestLogsIndexes --project Orchestrator/src/Orchestrator.Api
Scripts SQL¶
Los scripts SQL se encuentran en scripts/database/:
| Script | Descripción |
|---|---|
identify-duplicate-indexes.sql |
Identificar índices duplicados |
verify-unique-constraints.sql |
Verificar constraints UNIQUE |
drop-duplicate-indexes.sql |
Eliminar índices duplicados |
identify-unused-mcprequestlogs-indexes.sql |
Identificar índices sin uso |
drop-unused-mcprequestlogs-indexes.sql |
Eliminar índices no utilizados |
validate-mcprequestlogs-after-index-removal.sql |
Validar después de eliminación |
optimize-remoteagents-indexes.sql |
Optimizar índices de RemoteAgents |
Consultas Útiles¶
Verificar uso de índices¶
SELECT
schemaname,
relname AS table_name,
indexrelname AS index_name,
idx_scan,
idx_tup_read,
idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC;
Verificar tamaño de índices¶
SELECT
tablename,
indexname,
pg_size_pretty(pg_relation_size(indexname::regclass)) as size
FROM pg_indexes
WHERE schemaname = 'public'
ORDER BY pg_relation_size(indexname::regclass) DESC;