加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql 读书笔记

发布时间:2020-12-13 16:44:36 所属栏目:百科 来源:网络整理
导读:进程结构 master 进程 系统日志进程 后台写进程:系统更新插入数据会先写到共享内存,然后再由此进程周期写入数据文件,提供IO效率 预写式日志写进程:write ahead log 预写日志,是修改数据之前,必须把操作持久化到日志上,由此进程负责,wal日志可以被循

进程结构

  1. master 进程
  2. 系统日志进程
  3. 后台写进程:系统更新插入数据会先写到共享内存,然后再由此进程周期写入数据文件,提供IO效率
  4. 预写式日志写进程:write ahead log 预写日志,是修改数据之前,必须把操作持久化到日志上,由此进程负责,wal日志可以被循环覆盖。
  5. 归档进程:在wal日志被覆盖前,会先将其备份,由此进程负责。
  6. 统计进程:统计相关数据。
  7. 自动清理进程:在执行delete操作之后,不会立即删除数据文件,在update操作之后,数据库不会立即更新数据,而是增加新的版本数据,mvcc,这些数据由此进程整理。

表隐藏字段

  1. oid:数据库全局唯一对象id
  2. ctid:标示物理数据位置,由二元数组组成,前面是数据块编号,后面是对应的行号
  3. xmin和xmax:xmin标示数据插入事务,xmax标示数据删除事务,更新数据时,会增加一行,修改新旧xmin和xmax
  4. cmin和cmax:为了应对游标遍历的快照,对于cmax大于当前事务的,不可见,控制mvcc
  5. tmin和tmax:插入和删除的事务版本

MVCC实现原理

  1. 目的:实现读写并发并且保证数据一致性
  2. Mysql的innodb引擎和oracle写新数据的时候,将旧数据存放在单独的地方,比如回滚段,直接从那里进行读取
  3. Postgrsql将用cmin和cmax将事务数据区分,每次更新新数据,都插入新的数据行。
  4. 如何解决旧数据清理:前面提及到的自动清理进程,等到表数据达到一定量后,会自动清理数据。
  5. 优势:不用考虑是否被回滚端占用,无论进行多少事务都可以回滚
  6. 劣势:清理旧数据需要更大的查询遍历

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读