前端之家收集整理的这篇文章主要介绍了
postgresql 读书笔记,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
进程结构
- master 进程
- 系统日志进程
- 后台写进程:系统更新插入数据会先写到共享内存,然后再由此进程周期写入数据文件,提供IO效率
- 预写式日志写进程:write ahead log 预写日志,是修改数据之前,必须把操作持久化到日志上,由此进程负责,wal日志可以被循环覆盖。
- 归档进程:在wal日志被覆盖前,会先将其备份,由此进程负责。
- 统计进程:统计相关数据。
- 自动清理进程:在执行delete操作之后,不会立即删除数据文件,在update操作之后,数据库不会立即更新数据,而是增加新的版本数据,mvcc,这些数据由此进程整理。
表隐藏字段
- oid:数据库全局唯一对象id
- ctid:标示物理数据位置,由二元数组组成,前面是数据块编号,后面是对应的行号
- xmin和xmax:xmin标示数据插入事务,xmax标示数据删除事务,更新数据时,会增加一行,修改新旧xmin和xmax
- cmin和cmax:为了应对游标遍历的快照,对于cmax大于当前事务的,不可见,控制mvcc
- tmin和tmax:插入和删除的事务版本
MVCC实现原理
- 目的:实现读写并发并且保证数据一致性
- MysqL的innodb引擎和oracle写新数据的时候,将旧数据存放在单独的地方,比如回滚段,直接从那里进行读取
- Postgrsql将用cmin和cmax将事务数据区分,每次更新新数据,都插入新的数据行。
- 如何解决旧数据清理:前面提及到的自动清理进程,等到表数据达到一定量后,会自动清理数据。
- 优势:不用考虑是否被回滚端占用,无论进行多少事务都可以回滚
- 劣势:清理旧数据需要更大的查询遍历
原文链接:https://www.f2er.com/postgresql/193370.html