🦞 ClawHas Admin · 数据库分区

← 主控台 📊 运维 -- 退出

🗄️ 数据库分库分表 v1.15.0 · MySQL 原生 PARTITION BY RANGE 月度分区

⚙️ 维护操作

📊 各表分区状态

加载中...

📖 分区策略说明

📌 工作原理
MySQL 原生 PARTITION BY RANGE,按 createdAt 月份分区。
查询某月数据只扫该分区(快 5-10x),删除老数据用 DROP PARTITION(瞬间)。
应用层零改动,Sequelize 自动走分区路由。

📌 已分区的表(6 张):

表名分区字段用途
orderscreatedAt订单(月增长大)
messagescreatedAt客服消息(写入大)
kb_match_logscreatedAtKB 匹配日志
ai_call_logscreatedAtAI 调用日志
ai_routing_logscreatedAt路由日志
page_viewscreated_at页面访问(SEO 数据)

📌 cron 配置(推荐):

# 每天凌晨 2 点跑维护
0 2 * * * curl -X POST -H "Authorization: Bearer $ADMIN_TOKEN" \
  https://api.clawhas.com/api/admin/sharding/maintenance \
  -d '{"months_ahead":3,"retention_months":24}'

⚠️ 重要提示:

  • 已有数据的表 ALTER 加分区会很慢(取决于数据量),建议低峰期跑
  • 主键必须包含分区字段(MySQL 限制),已在 schema 中加 (id, createdAt)
  • 大表迁移可用 pt-online-schema-change(Percona Toolkit)无锁
  • p_future 永远存在,接收尚未分配分区的数据