OBCP第二章 OB存储引擎高级技术

简介: OBCP第二章 OB存储引擎高级技术

系统架构概念图

OceanBase数据库的存储引擎基于LSM Tree架构

静态基线数据(放在SSTable中)

动态增量数据(放在MemTable中)

本质上是一个基线加增量的存储引擎,跟关系数据 库差别很大,同时也借鉴了部分传统关系数据库存 储引擎的优点。

由于OceanBase 数据库采用基线加增量的设计,一部分数据在基线,一部分在增量,原理上每次查 询都是既要读基线 ,也要读增量 。为此, OceanBase数据库做了很多的优化,尤其是针对单行的优化。

内存分配(一)

OceanBase是支持多租户架构的准内存分布式数据库,对大容量内存的管理和使用提出了很高要求

OceanBase会占据物理服务器的大部分内存并进行统一管理

                                   

OceanBase是支持多租户架构的准内存分布式数据库,对大容量内存的管理和使用提出了很高要求

OceanBase会占据物理服务器的大部分内存并进行统一管理

通过参数设定observer占用的内存上限

memory_limit_percentage

memory_limit

memory_limit的默认单位为MB例如,memory_limit='40G'表示设置OceanBase 数据库进程的使用内存上限40GB。由于默认单位为MB,则memory_limit=40960 与memory_limit='40G'设置的值相同。

如果希望限制运行中的OceanBase数据库的内存大小,可以直接修改 memory_limit的值,使其达到预期。设置后,后台参数Reload线程会使其动态生效,无需重启。但是在设置时,需要保证memory_limit的值小于系统总的值。

参数说明

OceanBase提供两种方式设置observer内存上限:、


按照物理机器总内存的百分比计算observer内存上限:由memory_limit_percentage参数配置


直接设置observer内存上限:由memory_limit参数配置


memory_limit=0时,memory_limit_percentage决定observer内存大小;否则由memory_limit决定observer内存大小


以100GB物理内存的机器为例,下述表格展示了不同配置下机器上的observer

memory_limit_percentage

mermory_limit

Observer内存上限

场景1

80

0

80GB

场景2

80

90GB

90GB

场景1:memory_limit=0,因此由memory_limit_percentage确定observer内存大小,即100GB*80% = 80GB


场景2:memory_limit='90GB',因此observer内存上限就是90GB,memory_limit_percentage参数失效


内存分配(二)

OB系统内部内存

每一个observer都包含多个租户(sys租户 & 非sys租户)的数据,但observer的内存并不是全部分配给租户

observer中有些内存不属于任何租户,属于所有租户共享的资源,称为“系统内部内存”

通过参数设定“系统内部内存”上限 system_memory

租户可用的总内存 “observer内存上限”-“系统内部内存”



内存分配(三)

每个租户内部的内存总体上分为两个部分

不可动态伸缩的内存:MemStore, MemStore用来保存DML产生的增量数据,空间不可被占用

可动态伸缩的内存:KVCache, KVCache空间会被其它众多内存模块复用

           

MemStore

1.大小由参数memstore_limit_percentage决定,表示租户的 MemStore 部分占租户总内存的百分比。


2.默认值为50,即占用租户内存的50%


3.当MemStore内存使用超过freeze_trigger_percentage定义的百分比时(默认70%),触发冻结及后续的转储/合并等行为

KVCache

保存来自SSTable的热数据,提高查询速度

大小可动态伸缩,会被其它各种Cache挤占

内存结构总体结构回顾

相关文章
|
弹性计算 资源调度 负载均衡
OBCP第一章:OB分布式架构高级技术
OBCP第一章:OB分布式架构高级技术
193 0
|
存储 Cloud Native 安全
“数据库内核从入门到精通 ”系列课开讲!
基于 2022 年教育部-阿里云产学合作协同育人教学内容和课程改革项目合作,云原生分布式开源数据库 PolarDB 系列示范课程建设项目陆续和高校展开。阿里云开发者社区、阿里云PolarDB开源社区、武汉大学联合出品「数据库内核从入门到精通」系列课程正式上线,阿里云数据库专家携手高校教师系统化解读数据库理论,开展数据库实践,带学员全面掌握数据库内核开发技能。
“数据库内核从入门到精通 ”系列课开讲!
|
SQL 前端开发 关系型数据库
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十一):事务的一生
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十一):事务的一生
231 0
|
SQL 存储 缓存
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十二):谈谈in常量查询的设计与优化
开源分布式数据库PolarDB-X源码解读——PolarDB-X源码解读(十二):谈谈in常量查询的设计与优化
249 0
|
SQL 前端开发 关系型数据库
PolarDB-X 源码解读:事务的一生
本文将主要解读 PolarDB-X 中事务部分的相关代码,着重解读事务的一生在计算节点(CN)中的关键代码:从开始、执行、到最后提交这一整个生命周期。
965 2
|
存储 监控 前端开发
MYSQL 常见应用架构经验分享(二)|学习笔记
快速学习 MYSQL 常见应用架构经验分享
MYSQL 常见应用架构经验分享(二)|学习笔记
|
存储 SQL NoSQL
内核实战教程第二期|带你揭开数据库存储结构的神秘面纱
从0到1数据库内核实战教程将会带你学习数据库存储的基础知识以及 MiniOB 和 OceanBase 的存储引擎,开始实战数据库内核开发。不仅有丰富的理论知识解读,更搭配了 MiniOB 实战编码练习,让大家结合理论开始实战编码,真正的实现一个具备基础功能的数据库。
|
存储 SQL 分布式计算
以“升舱”之名,谈谈AnalyticDB PostgreSQL的核心技术
本文从升舱背景,数仓技术演进,业务需求出发,首先介绍了阿里云云原生数仓ADB PG的整体架构,使用场景与生态集成,产品形态与硬件平台支持,然后逐一介绍了自研向量化执行引擎,多态化存储引擎,自适应优化器,多租户资源隔离和云原生架构升级等升舱中用到的核心技术。在自研技术层面,按单机PostgreSQL本身对应能力,Greenplum在PostgreSQL上改造后的对应能力,以及业界主流产品相关能力和技术,到ADB PG对应能力构建和具体技术设计实现路线进行技术讲解。最后总结了具体升舱四步流程。希望通过本文能让读者对ADB PG从产品架构和核心技术能有全面了解,同时可用于评估业务升舱可行性。
589 0
|
SQL Oracle 架构师
Amazon Aurora数据库——带你领略极光之美
Amazon Aurora数据库——带你领略极光之美
448 0
Amazon Aurora数据库——带你领略极光之美
|
存储 SQL 负载均衡
OceanBase 源码解读(三):分区的一生
源码是OceanBase的“方向盘”,本系列主要围绕“源码解读”,通过文章阐述,帮助大家理清数据库的内在本质。此前,带你读源码第二篇《戳这里回顾:OceanBase源码解读(二):SQL的一生》为大家介绍了OceanBase 数据库中一条 SQL 的执行流程主路径,包括接收、处理、返回结果给客户端的过程,探讨了OceanBase的SQL引擎模块。
367 0