openGauss新特性 | 自动参数化执行计划缓存

目录

自动化参数执行计划缓存简介

SQL参数化及约束条件

一般常量参数化示例

总结


自动化参数执行计划缓存简介

执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划,以便在下次执行该SQL时直接使用,可以避免反复执行,从而优化执行过程。

参数化过程是指把SQL查询中的常量变成变量的过程。同一条SQL语句在每次执行时可能会使用不同的参数,将这些参数做参数化处理,可以得到与具体参数无关的SQL字符串,并使用该字符串作为计划缓存的键值,用于在计划缓存中获取执行计划,从而达到参数不同的SQL能够共用相同计划的目标。

openGauss数据库的自动化参数方案是在语法分析树的基础上进行参数化,然后使用参数化后的语法分析树作为键值计划缓存中获取计划。

openGauss数据库基于自动参数化而获取执行计划的流程如下图所示:

SQL 参数化及约束条件

在openGauss 数据库中, 某些场景中SQL不能参数化,及约束条件如下:

  • 仅支持IUD(insert, Update, Delete)三类DML

  • 仅支持Simple Query Protocal, 不支持Extended Query Protocol

  1. Simple Query Protacol: 例:gsql client

  2. Extended Quey Protocal: 例:JDBC client中的PreparedStatement

  • 不支持含returning关键词,不支持with clause,不支持hint,不支持子查询,不支持order by,不支持limit, 不支持函数,不支持含collate关键词,不支持type cast,不支持使用NULL关键词,不支持lgnore。

一般常量参数化示例

openGauss使用自动化参数执行计划缓存需要开启自动化参数

复制代码
SQLset enable_query_parameterization=on;

执行如下简单DML语句,自动化参数可以将 delete from table_btree where id = 250192 参数化为 delete from table_btree where id = $1,后续执行SQL便可以以自动化参数后的字符串为键值从缓存中取到执行计划。​​​​​​​

复制代码
sqldelete from table_btree where id = 250192;delete from table_btree where id = 484195;delete from table_btree where id = 595524;delete from table_btree where id = 982023;

总结

openGauss的自动化参数执行计划缓存特性目前支持simple query场景下的简单DML语句,使得非参数化语句能够 重复利用执行计划,减少执行计划的生成代价。对基础算子场景的性能提升具有很大帮助。

相关推荐
橙色小博20 分钟前
Python中的JSON库,详细介绍与代码示例
数据库·python·json
kngines24 分钟前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.1 数据质量评估指标(完整性/一致性/准确性)
数据库·postgresql·数据分析·值域校验·类型校验
oliveira-time26 分钟前
java单元测试代码
java·windows·单元测试
zfj32132 分钟前
用spring-boot-maven-plugin打包成单个jar有哪些缺点&优化方案
java·maven·jar·springboot
柚个朵朵32 分钟前
RabbitMQ
java·rabbitmq·java-rabbitmq
在肯德基吃麻辣烫34 分钟前
【Redis】List类型
数据库·redis·list
Cloud Traveler40 分钟前
【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎
数据库·分布式·架构
程序员曼布1 小时前
ThreadLocal源码深度剖析:内存管理与哈希机制
java·开发语言·哈希算法
hac13221 小时前
IDEA快速上手Maven项目:模板选择 + 多模块拆分
java·maven·intellij-idea
计算机毕设定制辅导-无忧学长1 小时前
ActiveMQ 性能优化与网络配置实战(一)
网络·性能优化·activemq