信息化 频道

金仓数据库KingbaseES V7执行计划缓存

  【IT168信息化】

  1 执行计划缓存简介

  一个语句从用户输入的SQL字符串到服务器可执行的状态,在服务器中一般要经历:词法语法解析(parse),分析(analyze),生成执行计划(plan)和执行(execute)的过程,我们把sqlàparseàanalyzeàplan的过程称为硬解析(hard parse)过程。这个过程的主要输出是语句的执行计划(plan),当语句比较复杂时,该过程占用的CPU时间比较长,如果在一个语句执行时将这个语句的执行计划缓存,当相同或相似的语句再次被执行时,可以使用已缓存的执行计划,从而节省硬解析的过程,降低CPU使用率。

  KingbaseES缓存支持基本的DML操作(Insert/Update/Delete/Select)。在执行语句大量重复出现,且不同的常量不会导致生成不同的执行计划时,使用执行计划缓存可以极大的节省cpu的执行时间。但使用执行计划缓存会带来额外的内存开销,因此建议在系统cpu较高,且内存充裕的情况下使用该功能。

  2 执行计划缓存的方式和效用

  KingbaseES V7中执行计划缓存支持多种级别和模式。通过两个系统参数控制:

  PLAN_CACHE_LEVEL:控制缓存级别。

  PLAN_CACHE_MODE:控制缓存模式。

  2.1 PLAN_CACHE_LEVEL

  缓存级别PLAN_CACHE_LEVEL属于session级的参数,顾名思义就是在缓存的深度上进行控制,取值及作用如下表所示:

金仓数据库KingbaseES V7执行计划缓存

  STATE_CACHE在CACHE的基础上缓存了执行状态相关数据,因此内存开销比较大。

  如要开启服务器的执行计划缓存功能,有如下两种方法:

  1) 在数据库配置文件kingbase.conf中加入:

  PLAN_CACHE_LEVEL = CACHE

  2) 通过客户端手动设置,如在isql中设置:

  TESTDB# SET PLAN_CACHE_LEVEL = CACHE;

  2.2 PLAN_CACHE_MODE

  缓存模式PLAN_CACHE_MODE属于session级别的参数, KingbaseES的缓存机制采用三种模式来匹配可以重用plan的SQL语句,匹配的方式通过hash算法实现,因此三种模式采用了三种hashkey来匹配。PLAN_CACHE_MODE的取值和作用如下表:

金仓数据库KingbaseES V7执行计划缓存

  用法:只有在plan_cache_level设置为CACHE或STATE_CACHE时才有效。设置方式同PLAN_CACHE_LEVEL的设置。

  2.2.1 执行计划缓存重用场景

  对于语句:select * from T where col = 1;

  不同缓存模式对应的执行计划重用情况如下表所示:

金仓数据库KingbaseES V7执行计划缓存

  对于SQL_SIMILAR的匹配模式还支持Declare cursor的执行计划缓存,例如语句:

  Declare C1 for select * from T where col = 1;

  Declare C2 for select * from T where col = 2;

  缓存的时候服务器会过滤declare关键词和cursor name,只匹配剩下的语句与常量类型,因此以上两个语句可以重用执行计划缓存。

  虽然执行计划缓存在特定场景下可以减少cpu的使用,但在某些场景下并不适合使用该技术,这类场景主要表现为:对于不同的常量可能生成不同的执行计划,如果重用执行计划则可能导致效率反而降低。例如在大数据量时根据查询条件有可能采用索引搜索也有可能是顺序搜索;有水平分区表的时候会出现执行计划与常量相关的情况等,类似这些情况都不适合使用执行计划缓存技术。

  2.2.2 三种模式比较

  不同执行计划缓存模式省去的流程对比如下图:(阴影部分为省去的流程)

  EXACT模式

  SQL_SIMILAR模式

  SIMILAR模式

  执行计划生成

  SQL语句

  执行计划Plan

  语法、语义分析

  词法分析

金仓数据库KingbaseES V7执行计划缓存

  结论:

  对于非水平分区表可以根据情况选择三种模式的缓存,根据内存使用情况来确定使用CACHE或是STATE_CACHE级别,对于水平分区表不建议采用执行计划缓存。SQL_SIMILAR和SIMILAR模式除了在匹配模式上不同外,由于SIMILAR模式匹配的是语法树,因此除常量外的语句部分如果不同但产生的语法树有可能一致,则SIMILAR也能重用执行计划,从而使得在相同的使用场景下,执行计划缓存的命中率会比SQL_SIMILAR稍高,占用的内存相对少,但cpu占用比SQL_SIMILAR模式多。

  简记为如下规则:

  在执行语句完全相同的情况下:

  三者的执行效率由高到低依次为:exact > sql_similar > similar

  在执行语句只有常量部分不同的情况下:

  三者的执行效率由高到低依次为:sql_similar > similar > exact

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
0
相关文章