PG内核解读 - 第3节 存储管理(上)

简介: 本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分:1. 主流存储引擎架构和原理2. 页面和元组3. Buffer管理4. 淘汰算法


PG内核解读-第3节存储管理1



 

一、主流存储引擎架构和原理

image.png 

目前,在选择存储引擎时,主要看性能和性价比。如上图所示,最快的是CPU Registers,然后是CPU Caches,Main Memory,Flash Disk以此类推。

同一件事CPU L1 Cache Ref的完成时间是0.5ns,Tape Archives完成的时间是31.7年。所以存储引擎间,性能差距非常大。

image.png 

接下来,讲一讲。存储引擎访问的原理。数据存储在磁盘上,磁盘里的数据一般以page或block的啊形式存在。page和block的页面在8k到64k之间。

用户在使用数据时,一般会创建一个Buffer Pool,把数据缓存到内存里。从而避免数据访问从磁盘读取,加速磁盘运行。当内存不够时,会淘汰不常用的数据。

image.png 

随着时代的发展,基于上述原理,扩展出了Cache Fusion架构,如上图所示。十年前,大家通常会使用Cache Fusion,同时在多个节点修改数据。

image.png 

上图是PolarDB共享存储架构,节点间的数据通过日志进行传递。目前,PolarDB共享存储架构已经开源。

image.png 

接下来,讲一讲XEngine的LSMTree架构。内存里的Active Memtable主要管理并更新热数据。当数据逐渐变成不可修改的Memtable,经过compactions变不同级别的文件,以Extent方式进行管理。

image.png 

云原生关系型数据库PolarDB综合了三层解耦,Serverless,多主架构,HTAP。当计算存储分离之后,在云上将资源池化,计算存储可以分别扩展,进一步节省资源。

目前,计算节点的内存层变成共享内存,CPU和内存通过解耦,可以分别扩展。节点数量按需自动横向扩展,线性扩展事务处理和数据分析能力,最大化资源利用率,降低客户成本。

 

二、页面和元组

image.png

接下来,介绍一下页面和元组。如上图所示,MySQLInnoDB通过段页式进行管理。segment包含了extent,extent包含了page,page包含了row。MySQLInnoDB的管理逻辑更清晰,代码更复杂。

image.png 

XEngine拥有类似于MySQLInnoDB的结构,它通过Extent和Block的方式进行存储管理。

image.png 

接下来,讲一下PG的页面结构。PG的页面结构相比MySQL的代码更清晰。8k里配置了Header,用来保存页面的基本信息。页面尾部的special标志,用来判断或检测。当增加一个Tuple时,会生成一个item。

Header有一个pd_lsn,在修改页面时,需要修改对应的日志。pd_lsn决定了页面的新旧程度。

image.png 

如上图所示,一个元组包括一个Header,以及各个字段的值。在Header里,元组的OID代表对象ID(可选);xmin代表创建交易id;xmax代表销毁交易id;cmin代表创建命令id;cmax代表破坏命令id;ctid代表元组id(页面/项目);natts代表属性数;infomask代表元组标志;hoff代表元组头的长度;bitsbit表示NULL的位图。

 

三、Buffer管理

image.png 

PG Buffer的Buffer table,相当于一个哈希表,映射Buffer的描述符和Buffer pool,从而快速定位查询。在启动PG时,会定义Buffer pool的大小,从而确定了Buffer pool的数据页。

首先,Buffer pool,descriptors,哈希表等,都存在SharedMemory里。创建内存之前,会计算大小,然后统一进行创建。

image.png 

接下来,讲一讲Buffer的描述符。PG11的bufferDesc,为了cache line对齐,将io lock单独管理,从而实现高效访问。

image.png 

上图是Bufferer的访问流程。其中,比较重要的函数是ReadBuffer_common。首先,isExtend会判断是否扩展新页面。通过获取页面编号,扩展新页面。

然后,BufferAlloe会获取buffer描述符,查找页面是否存在,不存在则用淘汰算法获取buffer。


如果发现在bufferpool中存在fbuf hash table,通过bufd获取buffer描述符,然后返回对应的buf描述符。


如果bufferpool不存在,可以利用Freelist或cocksweep获取可用buffer。


如果是脏页,则通过脏页刷盘,调用存储写buffer接口。然后,插入新的buf描述符到hash表,获取新的buffer描述符。


如果需要扩展新页面,则使用0填充新页面,调用存储接口写贝面到文件。

 

四、淘汰算法

image.png 

接下来,介绍一下淘汰算法。当Buffer用完后,需要淘汰Buffer里不常用的页面。常用的策略是FIFO,即先进先出。


LFU淘汰一定时期内被访问次数最少的页面,以次数作为参考。LRU淘汰最长时间未被使用的页面,以时间作为参考。


2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。新的淘汰算法CAR,通过Frequency和Recency作为参考。

image.png 

PG使用ClockSweep算法,把Buffer看成一个环,通过指针判断环上的数据。ClockSweep通过REFCOUNT和USAGECOUNT,实现整个淘汰过程。Buffer中淘汰页面代码的引用数为O,使用数减1,使用为O可淘汰。

image.png 

函数CreateSharedMemory在post master启动时,会创建共享内存。首先,利用size添加所有的共享内存,然后创建SharedMemory。淘汰算法就是把磁盘里的数据加载到页面,再返回描述符,访问对应的内容。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
机器学习/深度学习 安全 网络安全
云安全中心:病毒查杀
云安全中心病毒查杀功能使用阿里云机器学习病毒查杀引擎和实时更新的病毒库,提供丰富的系统扫描项,覆盖持久化启动项、活动进程、内核模块、敏感目录、SSH后门公钥等系统薄弱模块,可有效清理服务器的各类恶意威胁。本文介绍如何使用病毒查杀功能。
2274 2
|
人工智能 关系型数据库 分布式数据库
沉浸式学习PostgreSQL|PolarDB 9: AI大模型+向量数据库, 提升AI通用机器人在专业领域的精准度, 完美诠释柏拉图提出的“知识是回忆而不是知觉”
越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的AI产品,就需要不断将自身的知识库输入到大语言模型中进行训练。
2277 0
|
存储 NoSQL 网络协议
PG内核解读-第1节PostgreSQL系统概述
本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分: 1. 本系列教程介绍 2. PostgreSQL概述(历史、架构) 3. PostgreSQL安装启动 4. PostgreSQL常用命令、调试
PG内核解读-第1节PostgreSQL系统概述
|
SQL druid Java
高并发场景下必备利器:掌握连接池的使用和调优技巧
高并发场景下必备利器:掌握连接池的使用和调优技巧
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
人工智能 数据中心 云计算
AI网络新生态ALS发起成立,信通院、阿里云、AMD等携手制定互连新标准
9月3日,在2024 ODCC开放数据中心大会上,阿里云联合信通院、AMD等国内外十余家业界伙伴发起AI芯片互连开放生态ALS(ALink System)。
AI网络新生态ALS发起成立,信通院、阿里云、AMD等携手制定互连新标准
|
存储 SQL 缓存
Perf Arm SPE介绍与使用
本次分享的主题是 Perf Arm-SPE 的介绍及使用,本次分享主要介绍如何在倚天 710 平台上利用 Arm-SPE 特性定位伪共享问题、分析内存访问、分析指令延时以及监控访存延时等功能。 1. 背景介绍 2. Arm SPE的原理 3. Arm SPE在倚天服务器上的应用 4. Arm SPE 更多特性与功能的探索
1713 0
|
存储 分布式计算 大数据
【大数据】分布式文件系统HDFS
【大数据】分布式文件系统HDFS
784 0
【大数据】分布式文件系统HDFS
|
消息中间件 存储 数据管理
【Kafka】zookeeper对于kafka的作用是什么?
【4月更文挑战第6天】【Kafka】zookeeper对于kafka的作用是什么?