| name | database-health-monitor |
| description | Monitors database health, performs automatic maintenance, cleans expired data, and generates health reports. Triggers weekly or on-demand. Integrates with existing database scripts in scripts/database/ and scripts/maintenance/. Prevents data accumulation issues. |
Database Health Monitor
数据库健康监控器 - 自动维护和健康检查
🎯 核心功能
- 定期健康检查
- 自动清理过期数据
- 性能监控
- 生成维护报告
触发条件
自动触发
-
定期触发
-
阈值触发
- 数据库大小 > 1GB → 触发清理
- 匹配记录 > 10000 条 → 触发清理
- 查询响应时间 > 1s → 触发性能检查
手动触发
用户可以手动请求:
- "检查数据库健康状态"
- "清理过期数据"
- "生成数据库报告"
执行流程
步骤 1: 健康检查
检查项目:
1. 数据库连接状态
2. 数据库大小
3. 表记录数量
4. 索引健康状态
5. 查询性能
6. 磁盘空间
检查脚本:
node scripts/database/check_match_records.js
检查结果:
{
"timestamp": "2026-02-15T12:00:00Z",
"status": "healthy",
"checks": {
"connection": { "status": "ok", "responseTime": "50ms" },
"databaseSize": { "status": "warning", "size": "1.2GB", "threshold": "1GB" },
"matchRecords": { "status": "ok", "count": 8500, "threshold": 10000 },
"queryPerformance": { "status": "ok", "avgResponseTime": "250ms" },
"diskSpace": { "status": "ok", "available": "50GB" }
}
}
步骤 2: 自动清理
清理策略:
1. 删除 30 天前的匹配记录
2. 删除失败的上传记录
3. 清理临时文件
4. 优化数据库表
清理脚本:
node scripts/database/delete_old_matches.js
node scripts/maintenance/cleanup_duplicates.js
bash scripts/maintenance/clear_cache.sh
清理结果:
{
"timestamp": "2026-02-15T12:00:00Z",
"cleanupActions": [
{
"action": "delete_old_matches",
"deletedRecords": 1250,
"freedSpace": "150MB"
},
{
"action": "cleanup_duplicates",
"deletedRecords": 50,
"freedSpace": "5MB"
},
{
"action": "clear_cache",
"freedSpace": "200MB"
}
],
"totalFreedSpace": "355MB"
}
步骤 3: 性能监控
监控指标:
1. 查询响应时间
2. 数据库连接数
3. 慢查询日志
4. 索引使用率
性能分析:
interface PerformanceMetrics {
avgQueryTime: number;
slowQueries: Query[];
connectionPoolUsage: number;
indexUsage: {
tableName: string;
indexName: string;
usageRate: number;
}[];
}
性能优化建议:
如果发现慢查询 → 建议添加索引
如果连接池满 → 建议增加连接数
如果索引未使用 → 建议删除索引
步骤 4: 生成报告
报告格式:
# 数据库健康报告
**检查时间**: 2026-02-15 12:00:00
**数据库**: job-decision-system (Supabase PostgreSQL)
**总体状态**: ✅ 健康 / ⚠️ 警告 / ❌ 异常
---
## 📊 健康检查结果
| 检查项 | 状态 | 详情 |
|--------|------|------|
| 数据库连接 | ✅ | 响应时间 50ms |
| 数据库大小 | ⚠️ | 1.2GB (超过阈值 1GB) |
| 匹配记录数 | ✅ | 8,500 条 |
| 查询性能 | ✅ | 平均响应 250ms |
| 磁盘空间 | ✅ | 可用 50GB |
---
## 🧹 清理操作
### 已执行的清理
1. **删除过期匹配记录**
- 删除记录: 1,250 条
- 释放空间: 150MB
- 清理范围: 30 天前的数据
2. **清理重复记录**
- 删除记录: 50 条
- 释放空间: 5MB
3. **清理缓存**
- 释放空间: 200MB
**总计释放空间**: 355MB
---
## 📈 性能分析
### 查询性能
- 平均查询时间: 250ms
- 最慢查询: 850ms (匹配算法查询)
- 慢查询数量: 3
### 慢查询详情
1. **匹配算法查询** (850ms)
```sql
SELECT * FROM match_results WHERE created_at > ...
建议: 在 created_at 字段添加索引
- 简历搜索查询 (650ms)
SELECT * FROM resumes WHERE skills LIKE '%React%'
建议: 使用全文搜索索引
📊 数据统计
| 表名 | 记录数 | 大小 | 增长率 |
|---|
| match_results | 8,500 | 800MB | +5%/周 |
| resumes | 1,200 | 300MB | +2%/周 |
| job_descriptions | 500 | 100MB | +1%/周 |
💡 优化建议
立即处理 (P0)
- 数据库大小超过阈值,建议增加清理频率
- 为 match_results.created_at 添加索引
后续优化 (P1)
- 考虑归档 90 天前的数据
- 优化匹配算法查询
- 实施全文搜索索引
📅 下次维护
建议时间: 2026-02-22 (下周一)
预计操作:
📎 相关脚本
---
## 维护脚本集成
### 现有脚本
**数据库脚本** (`scripts/database/`):
- check_match_records.js # 检查匹配记录
- delete_old_matches.js # 删除过期记录
**维护脚本** (`scripts/maintenance/`):
- cleanup_duplicates.js # 清理重复记录
- clear_cache.sh # 清理缓存
### 集成方式
**统一调用接口**:
```typescript
interface MaintenanceScript {
name: string;
path: string;
execute(): Promise<MaintenanceResult>;
}
const scripts: MaintenanceScript[] = [
{
name: "check_match_records",
path: "scripts/database/check_match_records.js",
execute: async () => {
const result = await runScript("node", [this.path]);
return parseResult(result);
}
},
// ... 更多脚本
];
自动化维护计划
每日维护 (自动)
- 检查数据库连接
- 监控查询性能
- 记录性能指标
每周维护 (自动)
- 完整健康检查
- 清理 30 天前的数据
- 生成周报告
- 性能优化建议
每月维护 (自动)
- 深度健康检查
- 归档 90 天前的数据
- 生成月度报告
- 容量规划建议
告警机制
告警级别
P0 (紧急):
- 数据库连接失败
- 磁盘空间 < 10%
- 查询响应时间 > 5s
P1 (警告):
- 数据库大小 > 阈值
- 记录数 > 阈值
- 慢查询数量 > 10
P2 (提示):
告警方式
检测到告警
↓
生成告警报告
↓
保存到 docs/05-问题排查/数据库告警-YYYY-MM-DD.md
↓
通知用户
数据归档策略
归档规则
匹配记录:
- 保留 30 天内的数据(热数据)
- 归档 30-90 天的数据(温数据)
- 删除 90 天前的数据(冷数据)
简历数据:
- 保留所有简历(不删除)
- 归档 180 天未使用的简历
JD 数据:
- 保留所有 JD(不删除)
- 归档 180 天未使用的 JD
归档实现
interface ArchiveStrategy {
tableName: string;
retentionDays: number;
archiveTable: string;
async archive() {
await copyToArchive();
await deleteFromSource();
await logArchive();
}
}
容量规划
增长预测
基于历史数据预测:
当前数据量: 1.2GB
每周增长: 60MB
预计 6 个月后: 2.6GB
预计 1 年后: 4.3GB
容量建议:
如果增长率 > 10%/月 → 建议增加存储
如果预计 6 个月内达到上限 → 建议扩容
与其他 Skills 的协作
1. documentation-enforcer-v2
2. systematic-debugging
3. health-checker
配置选项
配置文件: scripts/database/db-monitor-config.json
{
"schedule": {
"daily": "00:00",
"weekly": "Monday 00:00",
"monthly": "1st 00:00"
},
"thresholds": {
"databaseSize": "1GB",
"recordCount": 10000,
"queryTime": "1s",
"diskSpace": "10%"
},
"retention": {
"matchRecords": 30,
"archiveRecords": 90
},
"cleanup": {
"autoCleanup": true,
"cleanupAge": 30
},
"reporting": {
"savePath": "docs/05-问题排查/",
"format": "markdown"
}
}
使用示例
示例 1: 每周自动维护
周一 00:00 自动触发
↓
执行健康检查
├─ 数据库连接: ✅
├─ 数据库大小: ⚠️ 1.2GB
├─ 记录数量: ✅ 8,500
└─ 查询性能: ✅ 250ms
↓
执行清理操作
├─ 删除 30 天前的记录: 1,250 条
├─ 清理重复记录: 50 条
└─ 清理缓存: 200MB
↓
生成报告
↓
保存到 docs/05-问题排查/数据库健康报告-2026-02-15.md
↓
通知用户: "数据库维护完成,释放 355MB 空间"
示例 2: 手动触发
用户: "检查数据库健康状态"
↓
database-health-monitor 执行
↓
运行所有检查脚本
↓
生成实时报告
↓
通知用户: "数据库状态健康,查看报告"
Skill Version: v1.0
Created: 2026-02-15
Compatibility: Claude Code 2.0+