首页 > 其他分享 >GaussDB技术解读高性能——计划缓存计划技术

GaussDB技术解读高性能——计划缓存计划技术

时间:2024-12-18 16:53:55浏览次数:3  
标签:缓存 解析 GaussDB 查询 计划 SQL 执行

GaussDB技术解读高性能——计划缓存计划技术

数据库接收到SQL语句后通常要经过如下处理:词语法解析->优化重写->生成执行计划-> 执行,从开始解析到计划生成其实是一个比较耗时的过程,一个常用的思想就是将计划缓存下来,当执行到相似的SQL时,从而可以复用计划,跳过SQL语句生成执行计划的整个过程,在一般OLTP业务负载中,由于涉及到的数据量较少,同时借助索引技术能够大大加速数据的访问路径,因此查询的解析、重写、优化阶段占比会比价高,如果能够讲一些模板性质的语句计划缓存起来,每次设置不同的参数那么点查询的处理流程能够大大简化,提升查询时延和并发吞吐量。

在这里插入图片描述

计划缓存技术:当数据库收到一条 SQL 请求后,首先会通过查询即系模块对 SQL 文本做一次快速参数化处理,参数化处理的作用是把 SQL 文本中的常量参数替换成通配符 ?,例如 SELECT * FROM t1 WHERE c1 = 1 会被替换为 SELECT * FROM t1 WHERE c1 = ?。接着数据库会从计划缓存中查看有没有已经生成好的计划给这条参数化后的 SQL 使用。如果找到了可用的计划,数据库就会直接执行这个计划。如果没有找到可用的计划,数据库会重新为这条 SQL 生成执行计划,并把生成好的计划保存到计划缓存中以备后续的 SQL 使用。通常情况下从计划缓存中直接获取执行计划相比于重新生成执行计划,耗时通常会低至少一个数量级,因此使用计划缓存可以大大降低获取执行计划的时间,从而减少 SQL 的响应时间。

在这里插入图片描述
上图为对比走计划缓存、不走计划缓存的SQL执行过程,可以看到执行待计划缓存的查询语句可以规避掉大量的处理逻辑,在OLTP并发负载场景下提升效果镜像,首先,事务型负载单条查询执行时间本身就在毫秒级ms,查询解析、RBO/CBO优化等一些列过程也是毫秒级往往会超过查询本身的执行时间,另一方面,查询解析、RBO/CBO本身是消耗CPU计算资源的操作,这对事务型高并发、高吞吐的事务型复杂起来说非常明显的资源占用,如果能将这部分资源剩下、同时将查询解析的时延消减为0对整体性能是非常明显的提升。

标签:缓存,解析,GaussDB,查询,计划,SQL,执行
From: https://www.cnblogs.com/xiaoxu0211/p/18615351

相关文章

  • GaussDB技术解读高性能——分布式执行框架
    由于GaussDB采用的是无共享Shared-nothing的架构,由众多独立且互不共享CPU、内存、存储等系统资源的逻辑节点组成。在这样的系统架构中,业务数据被分散存储在多个物理节点上,数据分析任务会被推送到数据所在位置就近执行,通过控制模块的协调,并行地完成大规模的数据处理工作,实现对数据......
  • GaussDB技术解读高性能——分布式优化器
    GaussDB技术解读高性能——分布式优化器分布式数据库场景下表分布在各个节点上,数据的本地性DataLocality是分布式优化器中生成执行计划时重点考虑的因素,基于ShareNothing的分布式数据库中有一个很关键概念就是“移动数据不如移动计算”,之所以有数据本地性就是因为数据在网络中......
  • Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区
    Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区https://developer.aliyun.com/article/1470012Openresty(lua+nginx)-Guava-Redis做多级缓存2024-11-3015:38:24​https://www.aliyun.com/......
  • Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区
    Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区Openresty(lua+nginx)-Guava-Redis做多级缓存-阿里云开发者社区https://developer.aliyun.com/article/1470012Openresty(lua+nginx)-Guava-Redis做多级缓存2024-11-3015:38:24​https://www.aliyun.com/......
  • gradle 缓存转maven仓库
    //Top-levelbuildfilewhereyoucanaddconfigurationoptionscommontoallsub-projects/modules.importjava.io.FileInputStreamimportjava.security.MessageDigestimportjava.text.SimpleDateFormatimportjava.util.Dateplugins{id("com.android.ap......
  • 如何用管理计划软件制定并落实新年规划,提升团队效率
    一、年度规划的重要性1.1为什么需要年度规划?无论是个人职业规划、部门目标还是公司的战略计划,年度规划为每个目标的实现提供了清晰的路线图。一个好的年度规划能够帮助团队明确年度任务,优化资源分配,提高工作效率,并且提供可量化的标准来衡量成果。具体来说,年度规划的重要性体现......
  • 如何分析和优化SQL语句的执行计划?
    理解执行计划的重要性执行计划是数据库管理系统(DBMS)在执行SQL语句时所采取的步骤和方法的描述。它展示了数据库如何访问表、使用索引,以及以何种顺序连接表等信息。通过分析执行计划,可以找出SQL语句执行效率低下的原因,如全表扫描、不合适的索引使用等,从而有针对性地进行优化。......
  • ArkWeb页面预加载与缓存 - 提升用户体验
    ArkWeb页面预加载与缓存-提升用户体验简介在Web应用开发中,页面加载速度和流畅性直接影响用户体验。ArkWeb框架提供了强大的页面预加载和缓存功能,可以帮助开发者提升应用的响应速度和效率。本文将详细介绍如何在ArkWeb框架中实现页面预加载、资源预加载、设置缓存模式以及清除......
  • 鸿蒙+next+封装轻量级缓存工具PreferencesUtil
    鸿蒙next封装轻量级缓存工具PreferencesUtilimportpreferencesfrom'@ohos.data.preferences';importdataPreferencesfrom'@ohos.data.preferences';import{AppUtil}from'./AppUtil';typePreferencesValue=string/***preference......
  • SpringBoot如何实现缓存预热?
    在SpringBoot项目中实现缓存预热,主要有以下几种常用方案:1.使用启动监听事件实现缓存预热可以通过实现ApplicationListener接口来监听应用上下文初始化完成的事件,如ContextRefreshedEvent或ApplicationReadyEvent,在这些事件触发后执行数据加载到缓存的操作。例如:@Compone......