首页 > 其他分享 >GaussDB事务存储组件

GaussDB事务存储组件

时间:2025-01-16 14:22:44浏览次数:1  
标签:存储 读写 LSN GaussDB 内存 组件 日志 节点 页面

事务存储组件

云原生数据库支持透明多写,所有节点对等,每个计算节点都可以读写全部的数据页面,事务在本节点执行,没有分布式事务。每个计算节点都有Local buffer pool,采用Remote memory pool扩展计算节点的内存,在多个计算节点之间共享buffer地址,避免页面在多个计算节点之间传来传去。存储引擎采用Inplace update引擎,底层存储接口统一采用段页式存储方式。事务ID本节点分配,保证唯一性。事务提交时间戳统一分配,合并原来的CLOG和CSN LOG统一记录。存储层采用Log is data,把数据库存储引擎的持久化卸载到Page Store执行日志持久化,日志回放修改页面,创建检查点。

在这里插入图片描述
在计算节点,分布式缓冲池位于数据访问层和分布式存储层的中间,所有的数据访问都要经过缓冲池。分布式缓冲池需要保证页面数据的一致性和页面查找访问的高效性,是云原生数据库实现透明多写,内存资源弹性的关键模块。

具体设计如下:

1、本地内存和远程内存两级缓存本地内存和远程内存的读写时延差别非常大(30~100ns 和 800ns~5us的区别), 哪些页面在本地缓存,哪些页面在远程缓存非常关键。

同时还有一个重要的因素需要考虑,那就是页面是否在多个计算节点被读写,因此云原生数据库把页面分为三大类,一类是页面在多个计算节点被读写(Heap页面,FSM页面),适合存放在远程内存里,页面地址共享;一类是页面大概率被读,几乎不被修改或者极低概率被修改(索引的非叶子页面,系统表的页面)适合存放在本地内存;另外一类是页面只在固定的单节点被读写,(智能路由优化后索引的叶子节点页面),适合存放在本地内存。理想的页面分布情况如下图所示:

在这里插入图片描述
在这里插入图片描述
3、支持远程内存池, 内存独立扩展。云原生数据库在云上支持各种业务负载,CPU、MEM和Storage的配比很难一开始就配置合适,有的是计算密集型的业务,有的是内存密集型的业务,有的是存储容量大的业务。针对各类业务场景,云原生数据库需要提供精细的各种资源的独立扩展能力。支持远程内存池,实现了集群物理内存独立扩展。内存池是可选服务,也可以跟计算节点合部署。

4、本地缓存远程页面地址,页面地址共享,全RDMA/UB单边读写。页面如果频繁在多个节点被读写,为了避免页面在多个节点之间传来传去,采用共享页面地址的方式,SQL节点Local buffer pool里缓存页面的远程地址,通过全单边读写远程页面。在设计上需要考虑读写页面的Latch问题以及写页面过程中故障的处理问题。对于exclusive latch采用lock bit和lock owner node的方式表示,对于share latch,lock bit和lock owner node的方式无法表示, 因为可以有很多发起者同时持有share latch。因此云原生在设计上采用lock-free无锁机制读取页面。

5、Lamport LSN在云原生数据库多写的架构下,每个节点有独立的日志流,本地日志流的LSN是本地分配维护的,本地有序逻辑递增,页面在各个SQL节点之间分别被修改的情况下,需要保证在新节点上修改页面产生的日志LSN要比这个页面之前的日志LSN要大才可以,也就是说从多个节点修改过同一个页面,日志虽然在各个节点独立的日志流里,但是要维护修改页面的日志顺序LSN。Redo日志在多个SQL节点都存在,需要保证这些日志的LSN顺序,才可以保证日志回放的顺序正确性,因此采用Lamport LSN。这部分的详细设计请参照文档<< GaussDB Kernel TD V600R001C00 XLog日志系统设计说明书.docx>>。

在这里插入图片描述

标签:存储,读写,LSN,GaussDB,内存,组件,日志,节点,页面
From: https://www.cnblogs.com/xiaoxu0211/p/18674915

相关文章

  • GaussDB实时分析组件
    云原生数据库以OLTP为主,同时也支持基于OLTP数据的OLAP需求,如每日报表。在云原生数据库中,DBA可以选择为这部分表创建列存索引。创建完列存索引之后,执行器在做顺序扫描的时候,会自动选择列存索引进行数据的读取,实现快速扫描计算的能力。云原生数据库以行存为基础,数据的增删改都先以......
  • GaussDB关键技术方案_通信组件
    GaussDB关键技术方案_通信组件云原生数据库采用shareddisk架构,各个计算节点对等,计算节点之间通过页面交换实现缓存数据的一致性,为了提高页面传递的效率,需要利用RDMA或UB单边读写的能力;云原生数据库为了管理动态资源,需要对动态资源的owner分配进行加锁,分布式锁管理需要利用原子操......
  • GaussDB多租组件
    云原生数据库支持多租户,通过多租户资源共享,一是降低租户的成本,二是通过共享资源的池化实现租户的资源弹性,提高租户业务的可用性。租户的资源弹性支持两种模式,ScaleUp和ScaleOut。ScaleUp是在单个计算节点上对租户的分配资源进行弹性处理,ScaleOut是在计算节点之间对租户的分配......
  • Qml 中实现时间轴组件
    【写在前面】时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件。本文将介绍如何使用Qml实现一个灵活且可定制的时间轴组件,并探讨其设计思路和实现细节。【正文开始】效果图组件概述我们实现的时间轴组件具有以下特点:支持自定义节点样式:可以设置节点的图......
  • vue2子组件获取父组件的实例以及数据,vue2子组件获取父组件的数据
    多个组件引入同一个js文件,实例化对象,数据不会错乱,再引入相同的组件,例如每个页面都需要引入到一个分页组件,然后分页组件需要获取各自父组件中的实例对象通过  this.$parent 即可获取到父组件中的数据所以在使用子组件时可以不用在组件上传入数据 公共js文件functionda......
  • Rust程序Vec中存储的一般都是Box动态指针吗?
    Rust程序Vec中存储的一般都是Box动态指针吗?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU在Rust中,Vec<T>不是专门存储Box<T>或其他动态指针,而是存储类型T的值。具体来说,Vec<T>会按照值的类型T来管理数据,它通常使用堆分配内存来存储数据(对于较大的数据或当数据需要动态增长时......
  • GaussDB系统表和系统视图概述
    系统表和系统视图概述系统表是GaussDB存放结构元数据的地方,它是GaussDB数据库系统运行控制信息的来源,是数据库系统的核心组成部分。系统视图提供了查询系统表和访问数据库内部状态的方法。系统表和系统视图要么只对管理员可见,要么对所有用户可见。下面的系统表和视图有些标......
  • GaussDB-SQL查询最佳实践
    GaussDB-SQL查询最佳实践根据数据库的SQL执行机制以及大量的实践总结发现:通过一定的规则调整SQL语句,在保证结果正确的基础上,能够提高SQL执行效率。使用unionall代替union。union在合并两个集合时会执行去重操作,而unionall则直接将两个结果集合并、不执行去重。执行去重会......
  • GaussDB 客户端工具--gsql常见问题处理
    GaussDB-常见问题处理连接性能问题开启log_hostname,但是配置错误的DNS导致的连接性能问题。连接数据库,通过“showlog_hostname”语句,检查数据库中是否开启log_hostname参数。如果开启了相关参数,那么数据库内核通过DNS反查客户端所在机器的主机名。如果数据库配置了不正确......
  • Windows 可靠多播传输驱动程序(RMCAST) 是 Windows 操作系统中负责支持和管理可靠多播(Re
    CVE-2025-21307漏洞是Windows可靠多播传输驱动程序(RMCAST)中的远程代码执行漏洞。该漏洞允许未经身份验证的攻击者在受影响的系统上执行任意代码,可能导致系统被完全控制。漏洞描述:该漏洞存在于Windows可靠多播传输驱动程序(RMCAST)中。攻击者可以通过发送特制的请求......