PolarDB for PostgreSQL 开源必读手册-缓冲区管理器(下)

本文涉及的产品
PolarDB Agent Express,2核4GB
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
简介: PolarDB for PostgreSQL 开源必读手册-

接上篇:https://developer.aliyun.com/article/1223087?spm=a2c6h.13148508.setting.24.44ec4f0eNvAByn

image.png

 

Backend访问数据块时,读取数据的流程如下:

 

首先,将进程要访问的数据块标记发送给管理器,并由管理器负责寻找当前哪个ID存在可用空间。然后管理器将找到的Buffer_id发送给用户进程并记录到描述层,管理器的后台将数据块读到数据缓冲区。后台进程得到Buffer_id以后,根据Buffer_id找到数据块。

 

如果下一次要读同样的块,backend进程会将需要访问的buffer tag发送给管理器,管理器扫描该数据块是否曾被访问过。如果有,则查询该数据块当前放在哪个Buffer_id并将Buffer_id发给backend进程,然后进行访问。由于数据块已经存在缓冲区,因此不再需要从磁盘里读数据块。

 

image.png

 

数据缓冲区的大小固定,无法将整个数据库的数据都存放在内存中,因此数据缓冲区的空间应轮流重复使用,需要做替换。

 

通常,页面替换的算法有两种,分别为LRU即最近最少使用规则(Oracle使用的算法)以及时钟扫描。

 

时钟扫描:描述层里通过refcount参数记录了数据块曾经被访问过的次数,进程访问一次则+1,被时钟扫描过一次则-1,以此判断数据块当前的受欢迎程度。如果refcount为0则代表该数据块可用。

 

如上图,

 

图里时钟指向的数据块refcount=3,则跳过,继续指向下一个数据块。

图里指向的refcount=2,对其做-1操作,继续指向下一个数据块。

图里指向的refcount=0,代表该块可用,因此可分配给进程使用。

 

LRU算法和时钟扫描算法的本质都是根据数据块当前被关注的程度来判断其是否可被替换。

 

image.png

 

数据缓冲区里的数据块被修改以后,会被标识为脏块。PolarDB提供了checkpointer和background writer两个进程用于写脏块。

 

Oracle也提供了两个进程,但是只由DBWriter负责写脏块,检查点进程只负责向数据缓冲区发信号。

 

image.png

 

检查点进程会将检查点的记录写到WAL日志文件,再将相应的脏块写到数据文件。写操作属于密集型操作,会影响数据库的性能,因此,此处写的机制为一点一点地刷新脏页,以求对数据库活动的影响最低。

 

默认情况下,每次写100个数据块,200毫秒写入一次。可理解为缓冲区不断地被修改,又不断地保存。过了一段时间再发检查点时,会将上一次发生检查点到目前为止的所有脏块都写入。

 

image.png

 

可以通过shared_buffers参数来控制共享缓冲区的尺寸,共享缓冲区内包含数据缓冲区里的内容。可以通过wal_buffers控制日志缓冲区的尺寸。effectiv_cache_size默认为4G,用于告知优化器内核中可用的缓存量,为扫描方式的选择提供参考性意见。

 

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
7月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2发布,新增开源Proxy组件与客户端驱动,支持读写分离、无感高可用切换及DDL在线变更,兼容MySQL生态,提升千亿级大表运维稳定性。
1915 24
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
8月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
9月前
|
人工智能 关系型数据库 MySQL
开源PolarDB-X:单节点误删除binlog恢复
本文由邵亚鹏撰写,分享了在使用开源PolarDB-X过程中,因误删binlog导致数据库服务无法启动的问题及恢复过程。作者结合实践经验,详细介绍了在无备份情况下如何通过单节点恢复机制重启数据库,并提出了避免类似问题的几点建议,包括采用高可用部署、定期备份及升级至最新版本等。
|
供应链 关系型数据库 分布式数据库
2025开源之夏火热报名|一起来设计PolarDB Dashboard
2025开源之夏正在火热报名中,PolarDB邀请全球学子参与云原生与Web开发的前沿项目。活动由中国科学院软件研究所发起,旨在鼓励高校学生通过实际开发维护开源软件,培养优秀开发者,推动开源生态发展。PolarDB项目聚焦设计与开发PolarDB-X Dashboard,要求掌握K8S Client-go和Web开发技术。参与者将根据项目难度获得税前8000至12000元人民币报酬,并获取结项证书。每位学生仅可申请一个项目,详情见官网。
2025开源之夏火热报名|一起来设计PolarDB Dashboard
|
11月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
1544 2
|
12月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
538 4
|
存储 关系型数据库 MySQL
开源PolarDB- X|替换Opengemini时序数据场景下产品力校验
本文作者:黄周霖,数据库技术专家,就职于南京北路智控股份有限公司,负责数据库运维及大数据开发。
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
644 0

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB
  • 推荐镜像

    更多