PolarDB 数据库结构 | 学习笔记(二)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 快速学习 PolarDB 数据库结构

开发者学堂课程【PolarDB for PostgreSQL 开源人才初级认证培训课程PolarDB 数据库结构学习笔记(二),与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1077/detail/15551


PolarDB 数据库结构

 

内容介绍:

一、数据库集群逻辑结构

二、数据库集群物理结构

三、表数据文件内部布局

四、访问表的读写方式

五、进程和内存结构


四、访问表的读写方式

1、行如何写

(1)行如何写入块

(a) Before insertion of Tuple 2 (b)After insertion of Tuple 2

image.png

一行的数据如何插入到数据块当中,开始的时候是放在快的底部然后在块头会产生一个指针,这个指针指向盘开始的一个位置,如果又插入了一条新的行,这个行就像垒柴火一样是留下往上垒,然后又会产生一个新的竞争,快存放数据的时候新插入一行会产生新的函指针。所以插入数据越来越多里面可用的空间双向的减少,双向的减少就是底下存放函的数据,上面的又要产生函指针,函指针也要占用空间。

2、行如何从块中读

(a)Sequential Scan SELECT*FROM tbl:

image.png

(b) Index Scan SELECT*FROM tb WHERE col="Queen':

image.png

在 PG 下面访问表的方式有两种,PolarDB 下面第一种叫做顺序扫描,通俗一点说法是全表扫描,全表扫描比如当前有两个数据块,PolarDB 在访问的时候先找到块的位置,然后从第一行开始直到把表的所有行找完以后,接下来再去找第二个快的第一行,按照快的顺序还有函的顺序来访问叫做顺序扫描或者叫做全表扫描,全表就是把表数据块里面所有的函扫描一遍,所以也叫全表扫描。索引扫描先根据索引行里面记录行所在的 id,通过函的 ID 就找到比如在函 ID 里面记录行在哪个数据块,然后是第几行,就会找到第七块的第二行,不需要进行全表扫描,这是 PolarDB 访问表的两种方式。


五、进程和内存结构

1、PolarDB 进程结构

postgres server process-postgres 服务器进程是与数据库群集管理相关的所有进程的父进程。

backend process- 每个后端进程处理连接的客户端发出的所有查询和语句。

background processes- 各种后台进程执行用于数据库管理的每个特性的进程(例如清空和检查点进程)。

replication associated processes- 在与复制相关联的进程中,它们执行流式复制。

background worker process- 它可以执行用户实现的任何处理。

启动 PolarDB 数据库的时候,实际上是先启动实例,实例由进程和内存组成,PolarDB 的进程结构首先是一个父进程叫做 postgres server 进程,是一个父进程,所有的比如后台进程还有后端进程等等,都是由父进程派生出来。Backend 进程是以后负责处理用户的请求。后台进程是用来管理整个数据库的,比如将来做主重复制或有复制进程等等。

image.png

PolarDB 的进程结构,起来的时候是它的一个父进程,然后所有的后台进程由它派生,所有的 back 进程也是由它派生,back 的进程实际上就是负责客户的请求,客户端访问数据库的时候,实际上不是直接跟数据库打交道,而是通过 back 的进程,可以把它称为是一个代理进程,把所有的请求发给 postgres,然后由 postgres 跟 server 进程发出请求或者跟后台进程发出请求,请求以后将来执行的结果再由 postgres 返回给用户进去,这是一个整个的 PolarDB 进程结构。

2、Postgres 服务进程

PolarDB 进程结构

postgres 服务器进程是 PostgreSQ L服务器中所有进程的父进程。早期版本它被称为“postmaster”。

pg_ctl 实用程序启动该进程,然后派生出各个后台进程。同时分配共享内存区域。

一个 postgres 服务器进程侦听一个网络端口,默认端口为5432。

进程启动通过一个命令 pg_ctl 启动,启动完以后默认会有一个网络监听端口 5432,可以在配置文件去修改所监听的端口。

image.png

PolarDB 进程的名字为 postgres,是一个父进程,下面派生了很多进程比如后台进程,以后要用到的检查点进程,写进程还有一些日志进程。

3、Backend 进程

后端进程(也称为 postgres )由 postgres 服务器进程启动,并处理一个连接的客户

端发出的所有查询。

PostgreSQL 允许多个客户端同时连接;配置参数 max_connections 控制客户端的最大数量。

基于 WEB应用程序,通常使用池中间件(pgbouncer 或 pgpool ll)。

image.png

Backend 的进程跟 Oracle 的 server 进程一样,代表用户进程然后去提供服务,PolarDB 下面 Backend 进程跟客用户进程是一一对应关系,把这种连接方式叫做专用连接,正常的 PG 数据库只支持专业连接,PolarDB 在这个基础上面后来又开发出一个跟 Oracle相类似的共享连接,也提供这种共享连接的方式,接下来也会开源出来。一个数据库允许有多少个用户连接由 max_connections 参数来控制最大的连接数。

4、Background 进程

process   description

background writer   In this process, dirty pages on the shared buffer pool are written to a persistent storage (e.q.HD DSSD) on a reqular basis qradually.(In version 9.1 or earlier,it was also responsible for checkpoint process.)

checkpointer   In this process in version 9.2 or latercheckpoint process is performed.

autovacuum launcher    The autovacuum-worker processes are invoked for vacuum process periodically.(More precisely, it requests to create the autovacuum workers to the postgres server.)

WAL writer     This process writes and flushes periodically the WAL data on the WAL buffer to persistent storage.

statistics collector     In this process, statistics information such as for pg stat activity and for pg stat database, etc. is collected.

logging collector (logger)    This process writes error messages into log files.

archiver     In this process, archiving logging is executed.

Backend

有很多后台进展,功能简单介绍比如写进程负责把 PolarDB 数据缓冲区的方块把它写到数据文件。检查点进程就是专门用它来发检查点,检查点进程同时也负责写。在 PolarDB 下面数据缓冲区的方块,除了写进程以外检查点进程也会写。还有对空间整理的时候有一个 WAL writer 还有日志文件写进程还有收集进程等等。如果数据库是归档也有一个归档进程,进程的结构跟 Oracle 都很相像,而且功能都一样。

$ pstree -p 27506

postgres(27506)-+-postgres(27507)

|-postgres(27508)

|-postgres(27509)

|-postgres(27511)

|-postgres(27512)

|-postgres(27514)

|-postgres(27515)---{postgres}(27516)

|-postgres(27517)

|-postgres(27518)

|-postgres(27519)

|-postgres(27520)

|-postgres(27521)

|-postgres(27522)

|-postgres(27523)

|-postgres(27524)

|-postgres(27525)

|-postgres(27526)

|-postgres(27527)

|-postgres(27528)

-postgres(27712)

通过查看父进程派生出来的进程。

5、内存结构

PostgreSQL 中的内存架构可以分为两大类:

Local memoryarea- 由每个后端进程分配给自己使用

Shared memoryarea- 由 PostgreSQL 服务器的所有进程使用

image.png

PolarDB 的内存结构分为两种,一种是本地内存,一个是共享内存。本地内存是每一个进程启动的时候给分配的自己用,共享是给整个实例提供服务的。

(1)本地内存区域

sub-area     description

work_mem     Executor uses this area for sorting tuples by ORDER BY and DISTINCT operations, and for joining tables by merge-join and hash-join operations.

Maintenance_work_mem     Some kinds of maintenance operations(e.g.VACUUM,REINDEX)use this area.

temp_buffers    Executor uses this area for storing temporary tables.

本地内存分为工作内存,工作内存比如执行一个 sql 语句的时候,如果里面涉及到排序操作的时候还有一些表连接的时候也要遇到。维护进程是对表进行VACUUM 或者 REINDEX的时候用到,还有一个临时 buffers 里面是存放临时表,如果要创建临时表就会遇到这个,本地进程像 Oracle 的 pga 一样,专门给 backend进程使用。经常看到 Oracle的一个结构,比如 Oracle 一个数据库,然后里面会有用户进程连接到数据库,会有 server 的进程,然后同时会分配一个缓冲区叫做 pga,pga 下面跟结构一样只不过名称不一样,server 进程叫做 backend,pga 叫做本地内存 local,结构非常相似。

(2)共享内存区域

sub-area     description

shared buffer pool     PostgreSQL loads pages within tables and indexes from a persistent storage to here, and operates them directly.

WAL buffer     To ensure that no data has been lost by server failuresPostareSoL supports the WAL mechanism.WAL data(also referred to as XLOG records) are transaction loa in PostareSQL:and WAL buffer is a

buffering area of the WAL data before writing to a persistent storage

commit log     Commit Log(CLOG) keeps the states of all transactions(e.g.. in_proaress.committedaborted)for Concurre ncy Control(CC mechanism.

一个是共享缓冲区,共享缓冲区实际上包含了数据缓冲区,如果要修改一个数据文件的数据块,是读到数据缓冲区里面进行修改,叫做共享缓冲区。在进行事务操作的时候,会分配一个日志缓冲区。 PolarDB 叫做 WAL buffer。还有一个内存区域叫做 commit log,PolarDB 下面有专门的进程去记录提交的一个事物的一个信息,所以呢专门分配一个commit log 缓冲区,为整个实例提供服务的,本地是给某一个后端进程提供服务。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5天前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
15 0
|
5天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
26 0
|
5天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
16 0
|
4天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
18 0
|
5天前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
13 0
|
1月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
20天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
116 42
|
11天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
65 25
|
6天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
1月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
348 0

热门文章

最新文章