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 的分支文档,尚无项目内实现和实测记录。字段和阈值可作为轻量流程起点,接入正式流水线前需验证数据库负载、缓存策略与参数分布。