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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
11天前
|
NoSQL 关系型数据库 分布式数据库
基于PolarDB的图分析:通过DTS将其它数据库的数据表同步到PolarDB的图
本文介绍了使用DTS任务将数据从MySQL等数据源实时同步到PolarDB-PG的图数据库中的步骤.
|
14天前
|
SQL 关系型数据库 分布式数据库
夺冠在即 | PolarDB数据库创新设计赛(天池杯)决赛答辩通知
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)于8月21日启动,吸引了200多所高校近千支队伍参赛。经过激烈角逐,60支队伍晋级决赛第一阶段,36支队伍脱颖而出进入现场答辩,将于12月29日在武汉大学争夺最终奖项。决赛要求选手基于PolarDB-PG开源代码部署集群并优化TPCH查询性能。完赛率超90%,成绩表现出明显梯度,前20名均在500秒内完成。评委来自学术界和工业界,确保评选公正。预祝选手们取得优异成绩!
|
29天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
11天前
|
NoSQL 关系型数据库 分布式数据库
PolarDB图数据库快速入门
图数据库(Graph Database)专门存储图数据,适合处理社交网络、知识图谱等复杂关系。它使用图查询语言(如Cypher、Gremlin)进行操作。PolarDB兼容OpenCypher语法,支持创建、查询、更新和删除图数据,包括模式匹配、过滤、MERGE避免重复、可视化工具等功能,简化了图数据的管理和应用。
|
16天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
40 3
|
16天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
43 3
|
16天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
58 2
|
29天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
198 15
|
23天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。