seq搜索引擎优化至少包括那几步?(跳过原有迭代器模型的执行步骤,直接执行查询计划)

优采云 发布时间: 2022-02-01 07:17

  seq搜索引擎优化至少包括那几步?(跳过原有迭代器模型的执行步骤,直接执行查询计划)

  介绍

  SQL By pass的主要作用是为一些简单的SQL生成查询计划。如果查询计划是满足一定条件的查询计划,可以跳过原迭代器模型的执行步骤,直接执行查询计划,原查询计划的初始化、执行、终止三个步骤即可集中到相邻的一个。代码在代码逻辑中执行,从而缩短了代码路径,使热点代码更加集中,最终加快了查询计划的执行速度。

  SQL by pass的核心原理

  在传统的关系型数据库中,SQL处理一般分为三个阶段:

  Ø 词法语法分析:主要是将用户输入的文本(SQL)转化为内部数据结构,一般称为语法分析树,并验证语法的正确性,最终得到表示SQL的语法分析树。

  Ø 查询优化:根据规则和物理成本对上一阶段的解析树进行优化,生成最优的查询计划。

  Ø 执行查询计划:执行上一阶段生成的查询计划(通常以迭代器的形式),并将结果返回给用户。

  为了加快 SQL 的处理速度,对于前两个阶段,一般采用类似于查询计划缓存的方法,避免重复 SQL 解析和查询计划生成,例如使用常见的 PBE 方法(prepare bind execute) .

  第三阶段,为了加快查询计划的执行速度,很多数据库都采用了基于LLVM的JIT技术。这主要用于典型的 OLAP 应用程序中,为特定逻辑生成固定字节码,提高 CPU 性能。效力。在我们面临的OLTP场景中,我们创新地使用SQL by pass来提高查询计划的执行效率。

  SQL by pass的主要作用

  SQL By pass的主要作用是为一些简单的SQL生成查询计划。如果查询计划是满足一定条件的查询计划,那么可以跳过原迭代器模型的执行步骤,直接执行查询计划,原查询计划的初始化、执行和终止三个步骤即可集中到相邻的一个。在代码的代码逻辑中执行,从而缩短代码路径,使热点代码更加集中,最终加快查询计划的执行速度。

  查询计划只能是满足以下条件的update insert delete select语句的查询计划:

  ·没有子查询;

  ·对于select语句,查询计划的顶层节点只能是索引扫描或仅索引扫描节点。如果SQL语句中出现limit和offset,limit和offset语句的参数必须是大于0的整数;

  · 对于insert语句,必须只有一个结果表,只有一个计划节点,并且不能进行UPSERT操作,结果列的类型只能是基本类型,不能对结果表进行DML操作;

  ·对于更新语句或删除语句,不能有UPSERT 操作或排序。结果表必须只有一张,顶层节点只能有一个plan节点,只能是index scan或者index only scan。

  使用SQL by pass的过程

  Ø 首先,我们创建一个表test_bypass_sq1,并在最后两个字段上建立索引。

  

  Ø 那么我们可以看到,当我们简单的插入一条数据的时候,我们使用了SQL的加速通过pass,因为这个插入操作的执行计划满足我们前面提到的条件:

  

  Ø 注意会话级参数enable_opfusion控制是否开启SQL By pass特性,目前默认开启。当我们关闭这个参数时,我们会发现同一个操作有不同的执行过程:

  

  Ø 因此,没有特殊情况,切记不要将session参数设置为off。

  对于一些简单的select操作,除了参数enable_opfusion之外,我们还需要设置一些额外的参数,使得生成查询计划的顶层节点是index scan或者index only scan,最终可以通过SQL通过pass .

  在test_bypass_sq1中插入3条数据后,我们执行如下SQL,可以看到没有使用SQL by pass:

  

  Ø 因为位图扫描是用来扫描表的,所以我们在禁用位图扫描后仍然不使用SQL by pass:

  

  Ø 因为优化器选择了seq scan。在我们禁用优化器选择 seq scan 后:

  

  Ø 优化器对表test_bypass_sq1选择索引扫描,在最终执行时使用SQL的旁路执行方式。

  同样,对于下面的SQL,优化器对test_bypass_sq1表生成一个index only scan,最终执行时,执行引擎使用SQL by pass方式来加速执行:

  

  Ø 对于一些复杂的查询,不能使用SQL by pass:

  

  Ø 因为生成的查询计划的顶层节点不是预期的索引扫描或仅索引扫描节点,而是聚合节点。

  因此,在使用 SQL By pass 特性时,需要注意上述参数和该特性的查询计划要求,以便优化器生成满足 SQL By pass 的查询计划,最终执行引擎可以使用这种技术可以加快查询计划。实施。

  使用 SQL by pass 前后对比

  为了对比SQL By pass技术的性能提升,我们采用了如下硬件配置:

  1.cpu,kenpeng920,64核*2

  2.内存,32GB *24

  3.硬盘,3.2TB*4

  4.网卡,25GE光纤网卡

  使用Vastbase G100数据库,根据TPCC 1000仓库,分别在通过pass开启和关闭SQL时,获取tpmC进行性能对比;以下是实际性能数据:

  性能测试数据

  通过测试结果可以看出:

  通过pass开启SQL后,性能提升15%左右。

  

  【海量智库】

  海量数据最新技术专栏

  我们会定期为您送上技术干货文章

  欢迎更多技术人员

  与我们讨论

  请将您的稿件提交至:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线