首页 > 其他分享 >openGauss-预编译慢问题

openGauss-预编译慢问题

时间:2023-12-12 14:33:57浏览次数:23  
标签:语句 custom 问题 编译 计划 参数 plan openGauss 执行

背景:
使用opengauss3.0.3,JDBC使用占位符,PreparedStatement的方法测试,因为是压测和业务场景特殊,每次使用的参数都一致。

现象:
1、不传参的方法,将where条件变量写死,执行时间很快
2、修改enable_pbe_optimization=off,发现执行5次之后,依然慢

分析:
查看where条件带值的SQL执行计划,和使用prepare execute的执行计划发现,后者会使用不同的索引,并且走nestloop,导致开销异常大

opengauss对于这个参数的解释为:

enable_pbe_optimization:设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化。
取值范围:布尔型。
•on表示优化器将优化PBE语句的查询计划。
•off表示不使用优化。
默认值:on

实测参数打开后,会选择错误执行计划。

但是关闭此参数后,同一会话执行5次参数相同,相同的SQL后,第6次又选到了错误的执行计划

plan_cache_mode:标识在prepare语句中,选择生成执行计划的策略。
取值范围:枚举类型
•auto表示按照默认的方式选择custom plan或者generic plan。
•force_generic_plan表示强制走generic plan。
•force_custom_plan表示强制走custom plan。
默认值:auto

对于这种场景,只能修改plan_cache_mode为force_custom_plan。

custom plan是指对于preapre语句,在执行execute的时候,把execute语句中的参数嵌套到语句之后生成的计划。custom plan会根据execute语句中具体的参数生成计划,这种方案的优点是每次都按照具体的参数生成优选计划,执行性能比较好;缺点是每次执行前都需要重新生成计划,存在大量的重复的优化器开销。
generic plan是指对于preapre语句生成计划,该计划策略会在执行execute语句的时候把参数bind到plan中,然后执行计划。这种方案的优点是每次执行可以省去重复的优化器开销;缺点是当bind参数字段上数据存在倾斜时该计划可能不是最优的,部分bind参数场景下执行性能较差。

标签:语句,custom,问题,编译,计划,参数,plan,openGauss,执行
From: https://www.cnblogs.com/ddlearning/p/17896731.html

相关文章

  • .net formwork WebApi 跨域问题
    ASP.NETFormwork Api/ASP.NetCoreApi 做比较。有关 Global.asax、FilterConfig.cs和RouteConfig.cs等都被Program.cs和Startup.cs两个类取而代之.程序中把Program.cs作为Web应用程序的入口,程序启动的时候会调用Startup.cs类。Startup.cs作用就是,对项目......
  • verilog设计行为仿真和时序仿真不一致, 原来是敏感信号的问题
    描述最近在vivado中设计一个计算器:28bit有符号加减法,结果出现行为仿真和时序仿真不一致情况代码r_a,r_b:对计算数据a,b的寄存器存储,也是计算器的数据输入s_bit:符号位cout:28bit计算器的进位输出cout[27]:最高位进位,用来判断符号以及加法进位always@(a,b......
  • 【常见问题】Python报错SyntaxError: Non-ASCII character '\\xe7' in file
    错误原因:windows默认编码格式是GBK,macOS,linux是utf-8。当使用windows且代码内有GBK不支持的字符集的时候,就会报错。解决方法:方法一在python文件的顶部加上编码格式#-*-coding:utf-8-*-方法二在python3.7以及之后,使用utf-8模式https://peps.python.org/pep-0540/pyt......
  • 作为系统运维工程师,针对外部用户反馈的问题,以下是一些常见的排查步骤和建议
    针对外部用户反馈的问题,以下是一些常见的排查步骤和建议:沟通和收集信息:与用户进行充分的沟通,了解问题的具体描述、出现的场景、频率、影响范围等。尽量获取用户提供的相关日志、截图、错误信息或其他详细描述,以便更好地理解问题。重现问题:尝试模拟用户操作过程,以重现......
  • 作为系统运维工程师,你需要对内部和外部用户反馈的系统问题进行逐步排查和解决。以下是
    作为系统运维工程师,你需要对内部和外部用户反馈的系统问题进行逐步排查和解决。以下是一些通用的步骤建议:收集信息:首先,明确内部和外部用户反馈的具体问题是什么,包括出现问题的具体场景、频率、影响范围等信息。如果可能,收集相关日志、错误信息或其他有关问题的详细描述。......
  • Unity3D帧同步的原理以及项目开发中可能遇到的问题与解决方案
    一、Unity3D帧同步的原理帧同步是指将游戏中的每一帧的状态数据同步给所有的客户端,使得所有客户端的游戏画面都保持一致。在Unity3D中,帧同步一般分为两种模式:客户端模式和服务器模式。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开......
  • linux遇到的各种问题记录
    1.安装程序时报依赖关系冲突,导致下载不了软件:错误如下:===========================================================================bbj@cunyang-None:~$sudoapt-getinstallntp正在读取软件包列表...完成正在分析软件包的依赖关系树...完成正在读取状态信息...完成......
  • 编译Platinum SDK库
    PlatinumSDK是一款开源的库,方便用户在各种平台上快算实现DLNARender功能,本文章主要介绍,使用AndroidNDK编译PlatinumSDK,方便后续在Android平台上使用。一.Platinum源代码下载地址:https://github.com/plutinosoft/Platinum二.编译环境准备:Platinum官方的Android编译介绍只......
  • CUDA相关问题总结
    能对__global__cuda的核函数使用std::function吗答:在CUDA中,global函数是在GPU上执行的核函数,它们的参数和返回值类型在编译时是确定的。std::function是C++标准库中的一个函数包装器,它允许将函数或可调用对象作为参数传递给其他函数。然而,在CUDA中,由于GPU和主机运行......
  • #P1114. 多重部分和问题
    每个数字选与不选的01背包本题的核心就是每个容量j,最多选t[i]个,然后不断递归#include<bits/stdc++.h>usingnamespacestd;constintN=105;constintM=1e5+10;intw[N],t[N];intdp[M];intmain(){ intn; cin>>n; for(inti=1;i<=n;i++){ cin>>w[i]; } for(int......