Просмотр исходного кода

docs: 补充 165/aidopdev 库容量与增量写入分析

skygu 3 месяцев назад
Родитель
Сommit
99a9a5732a
2 измененных файлов с 226 добавлено и 0 удалено
  1. 1 0
      doc/README.md
  2. 225 0
      doc/plan/aidopdev_165库容量与增量写入分析_20260716.md

+ 1 - 0
doc/README.md

@@ -59,6 +59,7 @@
 | [plan/S4/S4采购执行UAT数据生成执行任务书.md](./plan/S4/S4采购执行UAT数据生成执行任务书.md) | 给其它大模型或协作者执行 S4 UAT 数据生成的阶段任务、约束、确认点与验收标准 |
 | [plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md](./plan/S0-CodeFirst启动异常与BOM历史数据治理方案.md) | S0 legacy BOM 表 CodeFirst 启动异常、根因与彻底治理步骤 |
 | [plan/S8/S8数据库处理优化方案.md](./plan/S8/S8数据库处理优化方案.md) | S8 调度、检测日志、通知扫描与数据库写入压力优化方案 |
+| [plan/aidopdev_165库容量与增量写入分析_20260716.md](./plan/aidopdev_165库容量与增量写入分析_20260716.md) | 165/`aidopdev` 库容量快照、Top 表、调度增量写入与治理建议(2026-07-16) |
 | [plan/新系统数据库简明介绍与S1数据流.md](./plan/新系统数据库简明介绍与S1数据流.md) | 新系统数据库简明说明,并以 S1 为例说明数据中台流转 |
 | [plan/Ai-DOP项目待办清单.md](./plan/Ai-DOP项目待办清单.md) | **项目级待办统一入口**(专题子文档见 §2 注册表) |
 | [plan/S1-S4业务功能测试结果汇总_20260712.md](./plan/S1-S4业务功能测试结果汇总_20260712.md) | S1–S4 API/E2E 测试结果(含样例单号、失败根因线索、原始 JSON 路径) |

+ 225 - 0
doc/plan/aidopdev_165库容量与增量写入分析_20260716.md

@@ -0,0 +1,225 @@
+# aidopdev(165)库容量与增量写入分析
+
+| 项 | 内容 |
+|----|------|
+| 分析日期 | 2026-07-16 |
+| 目标实例 | `123.60.180.165:3306` |
+| 当前业务库 | `aidopdev`(本机 WinSW 发布配置 `Database.json` 所连) |
+| 统计口径 | `information_schema.tables` 的 `data_length` + `index_length`(表占用,非整机磁盘分区) |
+| 相关配置 | `server/.../Configuration/Database.json`、`WatchScheduler.json`、`Logging.json` |
+
+---
+
+## 1. 结论摘要
+
+1. **当前业务库 `aidopdev` 约 7.7 GB**(数据约 5.78 GB + 索引约 1.93 GB,约 490 张表)。
+2. **165 上用户库合计约 8.1 GB**;体量几乎都在 `aidopdev`。
+3. **后端在跑时会持续产生增量数据**,但性质不同:
+   - **真正“越积越多”**:`mdp_sync_log`、`mdp_transform_run_log`、`SysLogOp`(操作日志有约 180 天清理,但仍偏大)。
+   - **快照 / 按日可覆盖**:多数 `mdp_stg_*` / `dwd_*`、KPI 原子日表。
+   - **默认不涨**:S8 检测日志(`S8:Scheduler:Enabled=false`);`InvTransHist` 非本系统调度写入。
+
+---
+
+## 2. 库容量快照(2026-07-16)
+
+### 2.1 业务库 `aidopdev`
+
+| 指标 | 数值 |
+|------|------|
+| 数据(data) | **5.783 GB** |
+| 索引(index) | **1.933 GB** |
+| 合计 | **7.715 GB** |
+| 空闲(data_free) | 0.046 GB |
+| 表数量 | 490 |
+
+### 2.2 实例上各用户库
+
+| schema | data | index | total |
+|--------|------|-------|-------|
+| **aidopdev** | 5.783G | 1.933G | **7.715G** |
+| dopdemo | 0.265G | 0.004G | 0.269G |
+| hu_demo | 0.087G | 0.003G | 0.089G |
+| gogs | 0.027G | 0.002G | 0.029G |
+| metabase | 0.008G | 0.005G | 0.013G |
+| hu_prod | 0.008G | 0.003G | 0.010G |
+| datartrb / datart 等 | < 0.01G | — | — |
+| **用户库合计** | **6.192G** | **1.952G** | **8.143G** |
+
+(不含 `mysql` / `sys` / `information_schema` / `performance_schema`。)
+
+### 2.3 `aidopdev` Top 15 大表
+
+| 表名 | 合计 | 数据 | 索引 | 约行数 |
+|------|------|------|------|--------|
+| `dwd_process_outsource_delivery` | **4368 MB** | 2744 MB | 1624 MB | ~18,052,810 |
+| `SysLogOp` | **1790.5 MB** | 1788 MB | 2.5 MB | ~54,561* |
+| `InvTransHist` | 426 MB | 426 MB | 0 | ~916,250 |
+| `mdp_stg_item` | 239 MB | 209.8 MB | 29.2 MB | ~77,986 |
+| `dwd_requirement_examine_detail` | 207.1 MB | 126.7 MB | 80.4 MB | ~339,890 |
+| `ado_s8_detection_log` | 151.7 MB | 108.2 MB | 43.5 MB | ~137,703 |
+| `dwd_order_schedule_trans` | 125.9 MB | 63.6 MB | 62.3 MB | ~284,195 |
+| `mdp_stg_work_order_material` | 98.8 MB | 77.6 MB | 21.1 MB | ~55,098 |
+| `b_bom_pretreatment` | 53.6 MB | 53.6 MB | 0 | ~176,052 |
+| `mdp_stg_so` | 34.1 MB | 26.5 MB | 7.6 MB | ~17,129 |
+| `mdp_sync_log` | 27.1 MB | 14.5 MB | 12.5 MB | ~86,664 |
+| `mdp_std_item` | 25.8 MB | 11.5 MB | 14.3 MB | ~50,371 |
+| `LocationDetail` | 22.5 MB | 22.5 MB | 0 | ~50,116 |
+| `ado_smart_ops_kpi_atomic_day` | 18.5 MB | 18.5 MB | 0 | ~101,587 |
+| `ProductStructureMaster` | 18.5 MB | 10.5 MB | 8.0 MB | ~60,198 |
+
+\* `SysLogOp` 行数与体积二次查询时约为 **23.3 万行 / 1790.5 MB**(与 Top 表瞬时统计可能略有差异,以体积为准)。
+
+**体量结构要点:**
+
+- 最大单表 `dwd_process_outsource_delivery` 约占业务库一半以上。
+- `SysLogOp` 是第二大占用(约 1.8 GB),对磁盘与备份影响显著。
+- `InvTransHist` 为历史/外部流水类表,AiDOP 侧主要只读。
+
+---
+
+## 3. 是否持续产生增量?
+
+**会。** 后端服务运行期间,调度与接口流量会持续写入;需区分「追加型」与「快照/覆盖型」。
+
+### 3.1 调度与写入来源(代码侧)
+
+| 作业 / 服务 | 节奏 | 默认是否启用 | 主要写入 |
+|-------------|------|--------------|----------|
+| `S1MdpSyncTransformJob` … `S4MdpSyncTransformJob` | 约 **60 分钟** | 启用(随调度总开关) | stg/std/dwd upsert + `mdp_sync_log` + `mdp_transform_run_log` + KPI 原子日 |
+| `S5MdpRefreshJob` / `S6` / `S7` | Cron `0 2,7,12,17,22 * * *`(每日 5 次) | 启用 | 对应模块 MDP + 运行日志 |
+| `SmartOpsKpiMdpBootstrapJob` | 进程启动 **跑 1 次** | 启用 | 启动时触发 S1–S4 全量类刷新 |
+| `SmartOpsKpiAtomicWarmupJob` | 启动时(库空才重建) | 启用 | KPI 原子日全历史(有数据则跳过) |
+| `S8WatchSchedulerJob` 等 | 硬件 tick 60s / 业务 tick 默认 5 分钟 | **`S8:Scheduler:Enabled=false`** | 开启后才写 `ado_s8_detection_log` 等 |
+| `S8LogRetentionCleanupJob` | 每日 | **默认关闭**(需 `AIDOP_S8_LOG_CLEANUP_ENABLED`) | 清理旧 S8 日志 |
+| `LogJob`(Admin.NET.Core) | 每日 | 启用 | 按保留天数删除 `SysLogOp` / `SysLogVis` / `SysLogDiff` |
+| 接口监控写库 | 请求即时 | `Logging:Database` / Monitor 开启时 | `SysLogOp` 等 |
+| 业务事件触发 MDP | 订单评审 / 采购管线等 | — | 经 `MdpRefreshDispatcher` 后台全量刷新 |
+
+配置锚点:
+
+- `Configuration/WatchScheduler.json`:`Scheduler:Enabled`(默认 true,可用 `AIDOP_SCHEDULER_ENABLED`)、`S8:Scheduler:Enabled`(默认 **false**)
+- `Configuration/Logging.json`:数据库日志 / Monitor
+- 作业实现目录:`server/Plugins/Admin.NET.Plugin.AiDOP/Job/`
+
+### 3.2 大表增长模式分类
+
+| 表 / 表族 | 增长模式 | 说明 |
+|-----------|----------|------|
+| `mdp_stg_*` | 快照 / upsert | 按 `source_biz_key` 等 upsert,体积跟源数据,不随「跑了多少次」线性翻倍 |
+| 多数 `mdp_std_*` / `dwd_*` | 快照 / 按日 upsert | 同日刷新;**新 `stat_date` 会增加历史行**(若无清理) |
+| `dwd_process_outsource_delivery` | **按日快照累积** | 约 1900 万行;按 `stat_date` 写入,非每小时全量再插一份 |
+| `ado_smart_ops_kpi_atomic_day` | 可覆盖重建 | 按日期 delete+insert,有界于「日期 × 指标 × 维度」 |
+| `mdp_sync_log` | **无界追加** | 每次同步实体写一行;**无清理作业** |
+| `mdp_transform_run_log` | **无界追加** | 每次作业跑批写日志;**无清理作业** |
+| `SysLogOp` / `SysLogVis` | 追加 + 日清 | 流量驱动;`LogJob` 按 `sys_log_retention_days`(默认 **180**)清理 |
+| `ado_s8_detection_log` | 开启 S8 后追加 | 当前默认调度关闭;清理策略存在但默认未开 |
+| `InvTransHist` | 外部/历史流水 | AiDOP MDP 作业不主动灌数 |
+
+### 3.3 实测近期写入(2026-07-16 抽查)
+
+**`mdp_sync_log`(近 48 小时按小时)**
+
+- 几乎每个整点都有写入;多数时段约 **20~170** 条/小时。
+- 全表约 **84,632** 行 / **27 MB** 级(体积仍小于业务大表,但行数持续涨)。
+
+**`mdp_transform_run_log`(近 7 天按天)**
+
+| 日期 | 运行次数 | dwd_rows(作业汇总,非净增行) |
+|------|----------|--------------------------------|
+| 2026-07-16(至采样时) | 90 | ~47,895 |
+| 2026-07-15 | 267 | ~2,540,457 |
+| 2026-07-14 | 335 | ~3,146,437 |
+| … | 每天约 100~300+ | 量级百万级「处理行」计数 |
+
+全表约 **7,979** 行。
+
+**`SysLogOp`(近 7 天按天)**
+
+| 日期 | 新增条数(约) |
+|------|----------------|
+| 2026-07-16(至采样时) | 2,697 |
+| 2026-07-15 | 8,003 |
+| 2026-07-14 | 5,860 |
+| 2026-07-13 | 3,090 |
+| 更早几天 | 数百~两千级 |
+
+全表约 **233,443** 行,占用约 **1.79 GB**。
+
+---
+
+## 4. 风险与治理建议(供决策,未实施)
+
+| 优先级 | 建议 | 预期收益 |
+|--------|------|----------|
+| P0 | 为 `mdp_sync_log`、`mdp_transform_run_log` 增加保留天数 + 定时清理 | 阻止运行日志无限增长 |
+| P0 | 评估 `SysLogOp`:缩短保留、关闭非必要 Monitor、或归档冷数据 | 当前约 1.8 GB,对备份/磁盘最敏感之一 |
+| P1 | 评估 `dwd_process_outsource_delivery` 历史 `stat_date` 是否需归档/分区 | 单表约 4.3 GB,占库一半以上 |
+| P2 | 明确生产环境是否开启 S8 调度;若开启,同步打开日志清理 | 避免检测日志二次膨胀 |
+| P2 | 区分「开发 165」与正式库的调度强度(Bootstrap / 小时全量) | 降低开发库无意义重刷 |
+
+> 说明:以上为分析结论与建议,**本文档不包含已落地的清理脚本或配置变更**。实施前需单独评审影响(看板、对账、排障查日志)。
+
+---
+
+## 5. 复测 SQL(可手工执行)
+
+```sql
+-- 业务库总体积
+SELECT
+  ROUND(SUM(data_length)/1024/1024/1024, 3) AS data_gb,
+  ROUND(SUM(index_length)/1024/1024/1024, 3) AS index_gb,
+  ROUND(SUM(data_length + index_length)/1024/1024/1024, 3) AS total_gb,
+  COUNT(*) AS table_cnt
+FROM information_schema.tables
+WHERE table_schema = 'aidopdev';
+
+-- Top 表
+SELECT table_name,
+  ROUND((data_length + index_length)/1024/1024, 1) AS total_mb,
+  table_rows
+FROM information_schema.tables
+WHERE table_schema = 'aidopdev'
+ORDER BY (data_length + index_length) DESC
+LIMIT 15;
+
+-- MDP 同步日志近 48 小时
+SELECT DATE_FORMAT(sync_start, '%Y-%m-%d %H:00') AS h,
+       COUNT(*) AS cnt,
+       SUM(COALESCE(rows_written, 0)) AS rows_written
+FROM mdp_sync_log
+WHERE sync_start >= NOW() - INTERVAL 2 DAY
+GROUP BY h
+ORDER BY h DESC;
+
+-- 转换运行日志近 7 天
+SELECT DATE(start_time) AS d, COUNT(*) AS cnt
+FROM mdp_transform_run_log
+WHERE start_time >= CURDATE() - INTERVAL 7 DAY
+GROUP BY d
+ORDER BY d DESC;
+
+-- 操作日志近 7 天
+SELECT DATE(CreateTime) AS d, COUNT(*) AS cnt
+FROM SysLogOp
+WHERE CreateTime >= CURDATE() - INTERVAL 7 DAY
+GROUP BY d
+ORDER BY d DESC;
+```
+
+---
+
+## 6. 相关文档
+
+- [S8数据库处理优化方案.md](./S8/S8数据库处理优化方案.md) — S8 调度与日志压力
+- [新系统数据库简明介绍与S1数据流.md](./新系统数据库简明介绍与S1数据流.md) — 库与数据中台流转
+- [aidop项目服务器数据库相关资源信息.md](./aidop项目服务器数据库相关资源信息.md) — 服务器/库资源信息
+- [Windows后端WinSW守护重启方案.md](../Windows后端WinSW守护重启方案.md) — 本机发布与运行方式
+
+---
+
+## 7. 变更记录
+
+| 日期 | 说明 |
+|------|------|
+| 2026-07-16 | 初版:165/`aidopdev` 容量快照 + 增量写入机制与实测 |