使用 Horoscope 测试 TiDB 优化器
优化器在数据库中一直位于至关重要的位置,性能调优也常常需要围绕优化器来进行。作为数据库厂商,我们希望在各类复杂的业务场景中,TiDB 都能够给出比较理想的执行计划,因此在优化器和执行器上做了非常多的工作和努力,但是选错执行计划或者索引的情况仍然是日常中最为常见的一个问题。 优化器有关的问题可以简单归结为两种: 统计信息准确的情况下给出了错误的执行计划。 另一类则是在统计信息过期的情况下给错了执行计划。 选错索引是其中比较常见的一种情况,用户希望添加索引来加速查询速度,某些情况下,优化器可能会走到全表扫的物理执行计划或者选错索引使得实际执行效果退化成全表扫的情况。 针对上述情况,我们需要从更微观的层面来度量优化器的执行计划和索引选择的性能,评估在优化器上做的改进工作能否切实起到期望的效果。 为什么我们要开发 Horoscope? 为了测量优化器和执行器,从去年开始我们构建了daily benchmark 平台 perf.pingcap.com,覆盖常见的几种复杂查询的测试场景,包含 TPC-H、TPC-DS、Star Schema Benchmark 等,跟踪每天开发分支上这些查询的执行速度情况。 通过 daily benchmark,我们观测和定位到了若干次性能提升以及性能回退的情况。有些提升或者回退是优化器组件上的优化导致的,有些则是 TiDB 其他组件,或者存储层引发的。 虽然