跳转至

SQL 测试数据治理与稳定基线

  • 沉淀时间:2026-09-09
  • 来源:origin/summer-intern 的数据清洗与基线生成方案
  • 成熟度:provisional
  • 适用范围:固定测试环境、单批次约 50 条以内 SQL 的轻量评测

数据清洗目标

一条 SQL 进入基线测试前必须做到:可唯一识别、可重复执行、可公平比较、可追踪、可实际运行。原始 SQL 与历史参数只追加不覆盖,修订通过新版本表达。

建议最小数据模型:

实体 主键 关键内容
SQL 台账 case_id raw / clean SQL、fingerprint、数据库、状态、重复来源
参数集 parameter_set_id typical / heavy / boundary 参数、来源和数据快照
环境台账 environment_id 数据库版本、规格、索引与会话配置 hash、缓存策略
运行明细 run_id SQL 版本、阶段、运行类型、耗时、错误和证据引用
基线汇总 case + 参数 + 环境 + 版本 中位数、波动率、一致性与计划结构摘要

清洗流程

导入原始 SQL → 完整性检查 → 无语义格式化 → 参数集
             → fingerprint 去重 → EXPLAIN / 语法预检
             → ready / review / excluded

重复记录不能删除,应保留来源并用 duplicate_of_case_id 指向主 case。参数优先使用慢日志、审核记录和 APM 中的真实值;人工构造参数必须标明来源。敏感参数只保存脱敏值或安全存储引用。

基线执行协议

默认采用一次预热和五次正式执行,正式耗时中位数作为 baseline。预热仍记录,但不进入指标。

variability = (max_time - min_time) / median_time
波动率 状态 动作
≤ 20% stable 接受基线
20%–50% warning 再执行 5 次
> 50% unstable 暂停比较并排查环境、锁等待或参数

数据库版本、数据快照、索引结构、优化器配置或部署模式变化时,创建新的环境或基线版本,禁止覆盖旧基线。

结果一致性

大结果集不直接放进 Excel。使用规范化、稳定排序、流式 SHA-256,并记录行数、schema hash、方法版本和校验强度。无稳定排序字段时,可使用无序聚合摘要,但降低证据等级。

性能执行与结果校验应分离。若计算完整 hash 会污染计时,就新增 validation run,不把校验耗时算进 SQL 性能。

执行计划使用 plan_structure_hash,只保留算子、表、访问方式、索引、Join、排序聚合和分布式路由结构,排除实际耗时、节点编号等动态字段。

反模式

  • 用单次执行耗时作为基线。
  • 原 SQL 与优化 SQL 使用不同参数或数据快照。
  • 删除重复或异常记录,丢失来源和审计链。
  • 为结果 hash 强行给性能 SQL 加排序。
  • 对完整 EXPLAIN ANALYZE 文本直接 hash。

限制

这套方案来自未合入 develop 的分支文档,尚无项目内实现和实测记录。字段和阈值可作为轻量流程起点,接入正式流水线前需验证数据库负载、缓存策略与参数分布。

关联