GaussDB关键技术原理——高性能之SQL-BYPASS执行优化
GaussDB数据库SQL-BYPASS执行优化
在典型的OLTP场景中,简单查询占了很大一部分比例。这类查询本身大多数会走索引、分区剪支、只涉及单表和简单表达式的查询,这类查询的有效数据读取占比在这个查询解析、执行过程中并不大,即便使用计划缓存技术(PBE)把查询解析部分省下来以后,执行器初始化exec_init_*()仍然会有比较明显的开销,例如下面火焰图所profiling的场景,执行器初始化开销占比超过40%,并且每个同样的模板查询这部分的操作都是无效的重复开销,有效部分只有Operator::get_next(),占比只有15%左右。
因此为了加速这类查询,提出了SQL-BY-PASS框架,其核心思想是对执行路径inline处理优化,减少不必要的执行器函数迭代的开销,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加快简单查询的执行速度。以分区表点差举例,通过SqlByPass技术将分区表的执行过程进行扁平化inline处理,将原来SQL执行引擎中很深的调用栈扁平化,性能提升30%。