x
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
# 性能基准定义(建议)
|
||||
|
||||
> 文档定位:**性能基准与压测口径的专题参考文档**。
|
||||
> 本文给出建议性性能指标与测试数据口径,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 1. 核心接口基准
|
||||
|
||||
| 场景 | 接口 | 指标 |
|
||||
|---|---|---|
|
||||
| 单订单创建 | POST /api/sales-orders | RT <= 300ms;P95 <= 500ms |
|
||||
| 单订单修改 | PUT /api/sales-orders/{id} | RT <= 300ms;P95 <= 500ms |
|
||||
| 采购收货入库 | POST /api/purchase-orders/{id}/receive | RT <= 300ms;P95 <= 500ms |
|
||||
| 物料计划计算 | GET /api/sales-orders/{id}/production-plan | RT <= 300ms;P95 <= 500ms |
|
||||
|
||||
## 2. 压测资源与容量门槛
|
||||
|
||||
| 并发/吞吐 | CPU | 内存 | 错误率 |
|
||||
|---|---|---|---|
|
||||
| 200 TPS(持续) | <= 60% | <= 70% | <= 0.1% |
|
||||
|
||||
## 3. 测试数据要求
|
||||
|
||||
- 物料数 >= 10万
|
||||
- 客户订单量 >= 1000万(或等比例分区仿真数据)
|
||||
- 采购单量 >= 1000万
|
||||
- 库存流水量 >= 1亿(用于验证索引与分区收益)
|
||||
|
||||
## 4. 报告产出
|
||||
|
||||
- pg_stat_statements TopN
|
||||
- 接口 RT 分布(P50/P95/P99)
|
||||
- 锁等待与死锁统计
|
||||
- 索引命中率与缓存命中率
|
||||
@@ -1,52 +0,0 @@
|
||||
# 性能与扩展性评估补充(模具订单/采购主线)
|
||||
|
||||
> 文档定位:**性能与扩展性方向的专题规划文档**。
|
||||
> 本文描述的是性能评估、慢 SQL 发现、扩展路线等补充规划,不作为当前实现状态的权威说明。当前状态见 [../../STATUS.md](../../STATUS.md),后续路线见 [../../ROADMAP.md](../../ROADMAP.md)。
|
||||
## 1. 高并发冲突面与加固点
|
||||
|
||||
### 1.1 新增/修改模具订单的锁冲突来源
|
||||
|
||||
- 冲突对象:同一仓库同一物料的 `inventory` 行。
|
||||
- 冲突操作:创建订单自动扣料、按单领料、修改订单回补再扣减。
|
||||
|
||||
### 1.2 已落地的并发加固
|
||||
|
||||
- 对库存扣减采用原子更新(`UPDATE ... SET quantity = quantity - :qty WHERE quantity >= :qty RETURNING quantity`),避免“读-改-写”丢失更新与超卖。
|
||||
|
||||
## 2. 慢 SQL 发现与清单产出方法
|
||||
|
||||
### 2.1 生产环境抓取
|
||||
|
||||
- 启用 `pg_stat_statements` 并定期采样均值/最大耗时 TopN。
|
||||
- 参考脚本:`scripts/db/030_pg_stat_statements.sql`。
|
||||
|
||||
### 2.2 代码层高风险查询点(需要重点盯)
|
||||
|
||||
- 订单列表/详情:按 `customer_id/status/order_date` 过滤 + 明细表 join。
|
||||
- 库存流水:按 `warehouse_id/created_at` 分页、按 `reference_type/reference_id` 追溯。
|
||||
- 物料需求计算:必须避免 N+1(已将 BOM 查询批量化)。
|
||||
|
||||
## 3. 索引与查询重写(可执行脚本)
|
||||
|
||||
- `scripts/db/002_indexes_and_constraints.sql` 覆盖:
|
||||
- 订单头状态/客户组合索引
|
||||
- 明细表 `order_id/product_id` 索引
|
||||
- 流水 `warehouse_id+created_at`、`reference_type+reference_id` 索引
|
||||
- 库存唯一约束与关键 check 约束
|
||||
|
||||
## 4. 千万级订单量扩展路线
|
||||
|
||||
### 4.1 优先方案:PostgreSQL 分区
|
||||
|
||||
- 表:`sales_orders`、`purchase_orders` 按 `order_date` 月分区。
|
||||
- 参考模板:`scripts/db/010_partitioning_template.sql`。
|
||||
|
||||
### 4.2 分库分表(必要时)
|
||||
|
||||
- 拆分键:`org_id`(库路由)+ `order_date`(表分区)。
|
||||
- 灰度步骤:双写→读切换→写切换→数据校验→下线旧库。
|
||||
|
||||
## 5. 缓存建议(可选)
|
||||
|
||||
- 读多写少:产品/BOM/供应商/客户可使用本地缓存(Caffeine 类似策略在 Python 可用 LRU/TTL)或 Redis。
|
||||
- 幂等:新增订单建议引入 `idempotency_key`(请求头/字段),避免重复提交造成重复扣料与重复下单。
|
||||
Reference in New Issue
Block a user