降低业绩匹配任务峰值内存 #395

Merged
WuYongJie merged 4 commits from fix/wuyongjie-finance-memory-usage into main 2026-10-19 19:08:40 +08:00
Owner

修改

  • 业绩匹配任务以独立的不缓冲只读游标读取账单,单遍累计收入、优惠、冲减、退款及补行,完成/异常时释放专用连接;不改变原镜像连接的 PDO 状态。
  • 调试 --limit 下推 SQL,订单查询结果、候选集合和中间金额数组在使用完成后释放。
  • 增加金额和首笔元数据、优惠先于收款、无单号、不同列映射、游标参数和异常清理测试。

文件:app/Console/Commands/SyncStoreReceiptOrderMatches.php、tests/Unit/EcommerceFinance/StoreReceiptMemoryTest.php。

  • 发布准备发现:线上热修复与 main 文件树完全一致,但 Squash 导致提交号不同。两端发布脚本在现有祖先检查之外增加严格的完整文件树相等检查,真实未合并改动、回退版本、缺少对象仍拒绝发布;不使用回滚开关。附带 scripts/test-release-inclusion.ps1 实际 Git 历史用例。

验证

  • 相关回归 23 tests / 123 assertions;补充列映射后的目标测试 6 tests / 46 assertions,二者有重叠。
  • 本地相同 406,752 条模拟账单:新旧聚合的完整序列化 SHA256 一致;进程峰值 RSS 611.12 → 414.30 MiB,PHP 峰值 595.50 → 401.50 MiB。仅代表此模拟任务,未据此宣称生产常驻内存已减少。
  • 本地隔离 MariaDB 11.4.12:30,000 行约 58.59 MiB 结果,PHP 分配内存无增长;普通连接可交错查询,原缓冲选项保留,完整读取、主动中断和查询异常均关闭专用连接。
  • PHP 语法、完整 diff 自审及 diff check 通过。
  • PowerShell/Bash 两端各 8 个实际 Git 历史用例通过,包括相同树的 Squash 提交及其后续版本、真实未合并改动、回滚到修复前、缺少任一提交。

范围与发布

涉及金额计算路径但计算口径保持一致;不改权限、数据库结构、生产数据库参数或业务数据。
线上 31ace981 与主线 a6e0b2ac 文件内容一致但提交身份不同。仓库仅允许 Squash,因此保留正常 Squash 流程并修复上述误判;只有完整文件树相等才视为已包含。
合并后走标准工作站发布,验收受影响命令的受限只读计算、页面及容器健康;常驻数据库内存优化另列方案。

## 修改 - 业绩匹配任务以独立的不缓冲只读游标读取账单,单遍累计收入、优惠、冲减、退款及补行,完成/异常时释放专用连接;不改变原镜像连接的 PDO 状态。 - 调试 `--limit` 下推 SQL,订单查询结果、候选集合和中间金额数组在使用完成后释放。 - 增加金额和首笔元数据、优惠先于收款、无单号、不同列映射、游标参数和异常清理测试。 文件:`app/Console/Commands/SyncStoreReceiptOrderMatches.php`、`tests/Unit/EcommerceFinance/StoreReceiptMemoryTest.php`。 - 发布准备发现:线上热修复与 main 文件树完全一致,但 Squash 导致提交号不同。两端发布脚本在现有祖先检查之外增加严格的完整文件树相等检查,真实未合并改动、回退版本、缺少对象仍拒绝发布;不使用回滚开关。附带 `scripts/test-release-inclusion.ps1` 实际 Git 历史用例。 ## 验证 - 相关回归 23 tests / 123 assertions;补充列映射后的目标测试 6 tests / 46 assertions,二者有重叠。 - 本地相同 406,752 条模拟账单:新旧聚合的完整序列化 SHA256 一致;进程峰值 RSS 611.12 → 414.30 MiB,PHP 峰值 595.50 → 401.50 MiB。仅代表此模拟任务,未据此宣称生产常驻内存已减少。 - 本地隔离 MariaDB 11.4.12:30,000 行约 58.59 MiB 结果,PHP 分配内存无增长;普通连接可交错查询,原缓冲选项保留,完整读取、主动中断和查询异常均关闭专用连接。 - PHP 语法、完整 diff 自审及 diff check 通过。 - PowerShell/Bash 两端各 8 个实际 Git 历史用例通过,包括相同树的 Squash 提交及其后续版本、真实未合并改动、回滚到修复前、缺少任一提交。 ## 范围与发布 涉及金额计算路径但计算口径保持一致;不改权限、数据库结构、生产数据库参数或业务数据。 线上 `31ace981` 与主线 `a6e0b2ac` 文件内容一致但提交身份不同。仓库仅允许 Squash,因此保留正常 Squash 流程并修复上述误判;只有完整文件树相等才视为已包含。 合并后走标准工作站发布,验收受影响命令的受限只读计算、页面及容器健康;常驻数据库内存优化另列方案。
WuYongJie added 3 commits 2026-10-19 19:04:10 +08:00
月度汇总先按默认差额聚合,只有实收/应付兜底行再计算完整差额原因。7月验证结果一致,汇总耗时由约3.49秒降到0.71秒。
WuYongJie added 1 commit 2026-10-19 19:08:36 +08:00
WuYongJie merged commit bbb967e110 into main 2026-10-19 19:08:40 +08:00
WuYongJie deleted branch fix/wuyongjie-finance-memory-usage 2026-10-19 19:08:40 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WuYongJie/CaiWuXiTong#395
No description provided.