Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >打造次世代分析型数据库(七):向量化计算层缓存

打造次世代分析型数据库(七):向量化计算层缓存

作者头像
腾讯云大数据
发布于 2022-09-27 08:40:24
发布于 2022-09-27 08:40:24
56300
代码可运行
举报
文章被收录于专栏:腾讯云大数据腾讯云大数据
运行总次数:0
代码可运行

作者介绍

azurezhao(赵阳),腾讯云数据库高级工程师,具备多年存储经验,包括文件存储、kv存储、数据库存储等。目前在腾讯专注于CDW PG数据库内核相关的研发。

1. 整体架构和设计目标

向量化计算层缓存(VectorTableSlot Cache, 下面简称VTS-Cache)。和传统的OLTP数据按行聚簇方式不同,在OLAP场景下,查询大多数是对某些列进行的,数据存储按照列式存储,查询运算时的数据也是按照列式存储,如下图所示。当前每次执行都需要去存储层读取数据,会有开销,所以考虑引入一层缓存层。但是在OLAP场景下,因为数据很大,如果使用一个类似OLTP下的BufferPool的磁盘-内存映射缓存,会因为频繁的换入换出导致缓存几乎不生效。所以考虑引入一层执行层的缓存,缓存的粒度是如下的ColumnVector,因为缓存的数据会带Qualification,所以能比较大的过滤一些数据,从而减少数据cache的量,并且支持DML,不影响数据的一致性,支持缓存的LRU淘汰机制,目前只对Estore支持,后续会考虑支持Heap表,从而为HTAP提供统一的缓存层。

2. 竞品对比

2.1 查询结果缓存(MySQL)

缓存语句,通过配置项和规则(内存大小、语句条件是否含有变量等等)将满足要求的语句和结果缓存在query_cache中,并且使用LRU规则做内存替换。

  • 优点:对于前端透明,如果缓存命中,能有很大的收益。
  • 缺点:必须语句一模一样,发生DDL、DML后数据全部失效,导致命中率不高。

在高版本MySQL中已经去除了这个特性。

2.2 物理文件映射(PG)

通过内存块和物理文件按照block大小做映射,数据访问如果没有在内存中,则在磁盘中读取到内存中,再返回给上层。

  • 优点:粒度很细,不同query可以复用。在OLTP系统下,数据量不多,并且大多数是点查点写的SQL,TP数据遵循LRU的假设,所以cache的命中率很高。
  • 缺点:对于磁盘文件远大于内存、并且数据访问很大的OLAP场景,cache命中率很低。

3. VTS-Cache生成

本章将介绍VTS-Cache生成原理和细节。如下图所示

  • 只对EstoreseqScan生效。
  • 是否是Estore并且vector_buffer_size大于0。
  • 是否缓存没命中。
  • 是否表的大小小于vector_buffer_size/3,分区表看整个表的大小。
  • 做完Qualification之后,将数据merge进新开辟暂存区。
  • 暂存区如果满了,则去freelist找到CVDItem,将暂存区存储下来,清空暂存区。
  • 如果有tiny buffer,需要存下tinybuffer_freelist找到可用的tiny buffer,做内存拷贝,并且记录下每个tiny buffer原始的内存地址baseaddress。

3.1 VTS-Cache使用

本章将介绍VTS-Cache使用原理和细节。如下图所示

  • 判断是否满足使用VTS-Cache。
  • 在htab_vts_cache_for_rel寻找是否有对应relation的缓存。
  • 如果htab_vts_cache_for_rel有对应的cache,则遍历这个列表。
  • 遍历每一个CVDItem里面的query_id,在htab_vts_cache_for_condition里面寻找,判断scankey是否满足并且query里面的attnums是否是cache里面的子集。
  • 如果不满足,则将本次query_id插入临时hashtab,如果下次再遇到,则跳过。
  • 找到满足条件的query_id,然后找到这个query_id所对应的全部CVDItem。
  • 判断每个attnum对应的CVDItem数量是否一致,如果不一致,则说明发生过内存淘汰,需要重新选取满足的query_id。
  • 将满足要求的CVDItem的refcount+1,使用完之后或者事务abort的时候 将refcount-1.
  • 在拷贝tinybuffer的时候,需要同步将cv_vals里面的项跟baseaddress做相应偏移

3.2 VTS-Cache 的使用举例

图解如下:

3.2.1 原始数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table student(id int,varchar name,int age) with (orientation = column);select id, age from student where age > 15;
3.2.2 命中缓存场景1,列包含
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select age from student where age > 15;
3.2.3 命中缓存场景2,qualification包含
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select age from student where age > 16;

3.3 VS-Cache 的DML

  • 发生update或者delete。
  • 将发生变更的relation的oid和siloid记录到链表invalid_list。
  • 等待表结构自身变更完成。
  • 遍历invalid_list,对比VTS-Cache里面的内容,如果有匹配的,则将CVDItem的xmax置位为当前的xid。
  • 将事务提交。
  • 查询时候需要对比CVDItem里面的xmax和当前的事务id,和普通的MVVC事务处理机制相同。

3.4 VTS-Cache 的内存回收逻辑

VTS-Cache的内存回收按照朴素的LRU算法进行回收,需要注意的是,缓存块需要按需被pin住,直到使用结束,并且考虑各种异常场景需要释放引用计数,否则会有缓存泄露。

此外,VTS-Cache和普通的缓存不同,它是由一条query产生多个有关联的cache,所以回收内存也需要按照query级别来回收关联所有cache块。

3.5 VTS-Cache在HTAP系统中的运用

对于一个典型的HTAP应用,我们会将普通heap表里面按行存储的数据存储到按列聚簇的内存数据结构VectorTableSlot中,然后按照向量化的方式做运算,加速运算过程,也就是所谓的“行转列”。

对于运算层来说,拿到的是VectorTableSlot这个数据结构,如果我们对于行存的查询也构建一套VTS-Cache,就能为OLTP和OLAP提供统一的运算层缓存,进而加速HTAP场景运算。

4. 总结

VTS-Cache是一个OLAP场景下向量化执行缓存,考虑OLAP场景下处理的数据量比较大,直接用传统的内存-文件映射的缓存难以解决缓存的低效命中。所以考虑使用执行层的缓存,能够过滤大多数的数据,并且比类似MySQL的语句缓存更加灵活,能够方便支持Heap表,为OLAP和OLTP提供统一的HTAP执行层缓存。

推荐阅读

关注腾讯云大数据公众号

邀您探索数据的无限可能

点击“阅读原文”,了解相关产品最新动态

↓↓↓

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
打造次世代分析型数据库(二):这,不只是列存表
作者介绍 作者介绍:marklv(吕夫洋),腾讯云数据库高级工程师,专注于数据库存储、事务、高可用方向,具有多年的数据库内核研发经验。曾供职于华为2012高斯实验室;加入腾讯后负责CDW PG数据库全新存储引擎的设计和研发工作。 Effective Storage Engine设计背景 传统数据库按行进行表的存储和访问。由于表中每行的数据连续地存储在一起,对于交易性业务(OLTP)这样频繁以行作为单位存储表中数据的负载,行存储性能较好。 但是对于分析性业务(OLAP)这种经常对表中某些列进行查询计算的负载
腾讯云大数据
2022/08/26
7490
打造次世代分析型数据库(二):这,不只是列存表
打造次世代分析型数据库(六):如何从零实现向量化引擎
作者介绍 josehu(胡翔),腾讯云数据库高级工程师,具有多年分布式数据库内核研发经验,主要负责和参与过高可用、数据导入导出、索引等相关模块的设计和开发。博士毕业于中国科学院软件研究所,加入腾讯后主要负责CDW PG数据库向量化执行引擎等相关特性的设计和开发工作。 1. 什么是向量化执行 向量化是指计算从一次对一个值进行运算转换为一次对一组值进行运算的过程。 1.1 从CPU角度看 现代 CPU 支持将单个指令应用于多个数据(SIMD)的向量运算。例如,具有 128 位寄存器的 CPU可以保存 4 个
腾讯云大数据
2022/09/19
1.8K0
打造次世代分析型数据库(六):如何从零实现向量化引擎
​Mysql数据库查询好慢,除了索引,还能因为什么?
mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。
小白debug
2022/06/20
5880
​Mysql数据库查询好慢,除了索引,还能因为什么?
苏宁基于 ClickHouse 的大数据全链路监控实践
ClickHouse 是一款优秀的 OLAP 分析引擎,尤其是在单表分析 、Colocate Join 方面性能表现尤为突出。ClickHouse 之所以在众多的 OLAP 分析引擎中成为佼佼者,主要是因为它具备以下特点:列式存储、LSM-Tree 存储引擎、向量化执行引擎、异步 Merge 和 Mutation 机制、并发 MPP+ SMP 等。
深度学习与Python
2020/09/14
2.1K0
打造次世代分析型数据库(一):CDW PG全面升级
作者介绍 ericxwu(伍鑫),腾讯云数据库专家工程师,在数据库内核、数据复制、大数据计算等领域有丰富经验,曾发表多篇相关论文、专利。加入腾讯前曾在IBM DB2团队工作多年,后加入Hashdata云数仓公司。加入腾讯后,负责TDSQL PG系数据库研发工作。 CDW PG总体介绍 CDW PG作为腾讯首款自研MPP分析型数据库,在政务、公安、电信、金融等多个企业级项目中崭露头角。作为国内分析型数据库里的破局者,CDW PG在发布后继续面向行业前沿构架进行大幅优化。经过团队过去一年的深入探索和改进,CD
腾讯云大数据
2022/08/26
7770
打造次世代分析型数据库(一):CDW PG全面升级
腾讯云数据库伍鑫:MPP数据库HTAP技术探索
本文根据伍鑫在【第十三届中国数据库技术大会(DTCC2022)】线上演讲内容整理而成。
用户6543014
2023/03/02
1.5K0
腾讯云数据库伍鑫:MPP数据库HTAP技术探索
数据库专题(四) ——各类缓存技术
数据库专题(四) ——各类缓存技术 (原创内容,转载请注明来源,谢谢) 一、概述 缓存(Cache)技术原指高速数据,当CPU处理数据的时候,会先去缓存里面找,有的话就直接返回,不用再去RAM取数据。但是现在缓存已经不仅指cpu的操作了,而在程序中更多的是指内存和硬盘之间的缓存。凡是速度差距较大的两者,有介于中间的速度差异的结构,均可以称为用cache。速度排序,CPU>内存>硬盘,因此cpu到内存、内存到硬盘都有缓存。 1、优势 缓存利用相对高速的速度减少介质交互、低速操作等,例如减少网络I/O、减少
用户1327360
2018/03/07
1.3K0
真正的缓存之王,Google Guava 只是弟弟
前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将要谈到一个新的本地缓存框架:Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache,借着他的思想优化了算法发展而来。
Leetcode名企之路
2021/12/09
1.2K0
真正的缓存之王,Google Guava 只是弟弟
深入源码分析,缓存之王 Caffeine 为何这么猛?
Caffeine[1]是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是 Guava Cache 的优化加强版,有些文章把 Caffeine 称为“新一代的缓存”、“现代缓存之王”。
二哥聊运营工具
2021/12/17
3K0
深入源码分析,缓存之王 Caffeine 为何这么猛?
自适应软件缓存管理
由于负载的多样性,很难开发一个能够适用于各种负载的软件缓存管理策略。在本论文中,我们调研了一种用于软件缓存管理框架的自适应机制,通过调节参数来调节负载的最常(访问) vs 最近(访问)的缓存比例。最终目标是通过自动调节参数来获得最佳性能(而无需人工介入)。我们针对该问题研究了两种方案:爬山解决方案和基于指示器的解决方案。在爬山解决方案中,通过不断配置系统来获得最佳配置。在指示器方案中,我们评估了最常(访问) vs 最近(访问)对系统的影响,并根据单一变量调节参数。
charlieroro
2021/07/14
9660
自适应软件缓存管理
TiDB:向量化执行使表达式性能提升10倍成为可能
查询执行引擎对数据库系统性能非常重要。TIDB是一个开源兼容MySQL的HTAP数据库,部署广泛使用的火山模型来执行查询。不幸的是,当查询一个大库时,向量化模型会造成较高的解释开销以及较低的CPU CACHE命中率。
yzsDBA
2021/12/06
1.2K0
TiDB:向量化执行使表达式性能提升10倍成为可能
向量化引擎怎么提升数据库性能
数据库向量化是一项工程性很大的挑战,但可为StarRocks等实时分析引擎提供数量级性能提升。
yzsDBA
2023/11/06
9140
向量化引擎怎么提升数据库性能
数据库与缓存
数据库与缓存 摘要: 这里讲的缓存是数据库本身的缓存,并不是外部缓存例如Redis/Memcache等等。 数据库的数据分为冷数据和热数据库,通俗的讲冷数据是存储在磁盘上不经常查询的数据;而热数据是频繁查询的数据,这部分数据会被缓存到内存中。 本文节选自《Netkiller Architect 手札》 第 10 章 数据库与缓存 目录 10.1. 什么是数据库缓存? 10.2. 为什么缓存数据呢? 10.3. 什么时候使用数据库缓存 10.4. 涉及缓存的地方有哪些 10.5. 谁来控制数据库缓存 10.6
netkiller old
2018/03/06
3.2K0
这就是TDSQL的向量化执行引擎?有效降低函数调用开销,提升CPU利用率
在“国产数据库硬核技术沙龙-TDSQL-A技术揭秘”系列分享中,5位腾讯云技术大咖分别从整体技术架构、列式存储及相关执行优化、集群数据交互总线、Fragment执行框架/查询分片策略/子查询框架以及向量化执行引擎等多方面对TDSQL-A进行了深入解读。没有观看直播的小伙伴,可要认真做笔记啦!今天带来本系列分享中最后一篇腾讯云数据库高级工程师胡翔老师主题为“TDSQL-A向量化执行引擎技术揭秘”的分享的文字版。 作为领先的分析型数据库,TDSQL-A是腾讯首款分布式分析型数据库,采用全并行无共享架构,具有自
腾讯云数据库 TencentDB
2021/08/05
9190
MySQL数据库性能优化之一
文章来自:博客 数据库属于 IO密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化: query_cache_size/query_cache_type (global) Query cache 作用于整个 My
企鹅号小编
2018/01/26
2.4K0
分布式数据库的HTAP能统一OLTP和 OLAP吗?
OLAP和OLTP通过ETL衔接。为提升OLAP性能,需在ETL过程进行大量预计算,包括:
JavaEdge
2023/08/13
5010
分布式数据库的HTAP能统一OLTP和 OLAP吗?
云原生数据库设计新思路
在讲新的思路之前,先为过去没有关注过数据库技术的朋友们做一个简单的历史回顾,接下来会谈谈未来的数据库领域,在云原生数据库设计方面的新趋势和前沿思考。首先来看看一些主流数据库的设计模式。
PingCAP
2021/01/14
1.7K0
傻瓜MySQL查询缓存都不知道...
我们知道,缓存的设计思想在RDBMS数据库中无处不在,就拿号称2500w行代码,bug堆积如山的Oracle数据库来说,SQL的执行计划可以缓存在library cache中避免再次执行相同SQL发生硬解析(语法分析->语义分析->生成执行计划),SQL执行结果缓存在RESULT CACHE内存组件中,有效的将物理IO转化成逻辑IO,提高SQL执行效率。
敖丙
2021/01/08
8230
傻瓜MySQL查询缓存都不知道...
AnalyticDB向量化引擎
AnalyticDB是阿里云企业级云原生数据仓库,在GreenPlum和PostgreSQL基础上开发的。语法上对两者保持兼容,功能层面上为GP超集。其架构:
yzsDBA
2022/09/06
5140
AnalyticDB向量化引擎
运维锅总详解计算机缓存溢出
缓存溢出(Cache Overflow)是指缓存达到其容量极限后无法存储新的数据项的情况。为了讲解缓存溢出及其应对方法,以下将分为理论讲解和具体例子两部分。
锅总
2024/07/11
4290
运维锅总详解计算机缓存溢出
推荐阅读
相关推荐
打造次世代分析型数据库(二):这,不只是列存表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验