Skip to content

🧪 test(database): 建立真实数据库线程与性能基线 #213

Description

@ZhaoXingPeng

问题与用户价值

当前单元测试和 SQLite 集成覆盖了连接管理与 introspection 契约,但尚未证明真实 MySQL 8.4、PostgreSQL 16 驱动下的线程模型、连接生命周期和事务边界。缺少这些证据会让并发关闭、断连恢复和性能回归只能依赖推测,维护者无法判断生产部署限制。

建议方案与替代方案

  • 使用 MySQL 8.4 与 PostgreSQL 16 容器建立可重复的集成矩阵,覆盖连接创建、元数据读取、查询、代码生成分析和连接释放。
  • 通过可控 worker/barrier 断言同步驱动调用始终位于 worker 线程;验证同一连接串行化、不同连接并行化、关闭等待在途操作完成。
  • 固化连接池大小、并发请求数、数据规模和运行环境,重复至少 3 次并记录 p50/p95/p99、吞吐量、错误率、CPU/内存和连接占用;原始结果上传 CI artifact,摘要写入基准文档。
  • 替代方案:仅使用 SQLite mock 或理论分析不能覆盖真实驱动协议、锁和网络断连差异,因此不作为完成证据。

验收标准

  • MySQL 与 PostgreSQL 真实驱动矩阵在干净环境中可重复通过。
  • worker 线程、连接串行化/并行化、关闭等待和异常后复用均有自动化断言及失败证据。
  • 提交、回滚、数据库重启/断连恢复行为有覆盖且错误语义明确。
  • 性能基线至少重复 3 次,报告包含环境、样本量、统计口径和原始 artifact 位置。
  • README/服务文档明确已验证的数据库版本、已知限制和未覆盖场景,不宣称未经证明的生产级能力。

架构、兼容性与测试计划

不预设公共 API 或数据库 schema 变更;若验证发现需要调整连接生命周期或线程边界,另开实现 PR 和 ADR。测试依赖 Docker 中的 MySQL 8.4/PostgreSQL 16,使用脱敏 fixture 和临时数据库;CI 无真实数据库时必须明确标记未执行,不能将 mock 结果写成真实驱动证据。性能报告只用于建立当前基线,不作为跨机器绝对承诺。

非目标与风险

不在本 Issue 内新增业务功能、修改生成模板或替换数据库驱动。风险包括容器启动时间、不同 runner 负载和驱动版本导致的测量波动,以及真实断连场景仍可能需要后续专项验证。回滚方式为移除新增 benchmark/集成脚本和文档提交;相关实现变更需独立 PR。安全问题不在公开 Issue 中披露,按 SECURITY.md 流程处理。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions