postgresql 读书笔记

进程结构

  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:插入和删除的事务版本
  6. infomask:用整形位操作,标示事务可见性状态,减少访问clog的次数

MVCC实现原理

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

空闲数据块管理和服用

  1. 记录空闲数据块大小
  2. 实现数据块快速查找(fsm)

index-only scan

  1. 索引上没有多版本信息,原版本需要到表中再查询一遍
  2. 后版本通过可见性映射表实现(存储着某数据块数据行是否对全部事务可见,注意是全部事务,部分可见和不可见之类的情况,都需要按照逻辑1去读取)

hot-only tuples

  1. 若出现索引对应的数据行出现更新,切数据行的更新非索引字段,如何进行优化
  2. 由于mvcc的缘故,索引的更新都非直接更新原数据行,而是新增一条记录
  3. hot技术指的是在如果新旧数据行都同一数据块中,则旧数据行会存有指向新数据行的指针,所以更新非索引字段不会引起索引的结构更改。
  4. 如果在同一数据块中,hot技术无法使用,需要修改参数(fillfactor)填充因子,设置一个更小的值,即数据块预留一定比例的空闲区域,达到一定数量就不再往数据块中插入数据了,保证hot技术的进行。

double cache问题:

  1. 由于文件系统对文件会存在缓存,同时postgresql在共享内存中也又相关的缓存,容易导致内存利用率不高
  2. 解决办法:尽量增大或减少shared buffer的使用

vacuum 优化

  1. 清理旧版本占用的空间
  2. 更新统计数据,包装计划正确性
  3. 当事务id更新到最大值后,会从初始值开始递增,需要将旧版本的事务id,更改为一个永远可见的事务id
  4. vacuum标准方式:与alert不能并发,速度快
  5. vacuum full:阻塞所有语句,速度慢,回收空间大
  6. 为了减少回收的性能代价,通过多个配置参数计算代价值,若超过指定阀值,则自动回收,否则休眠

wal日志优化

  1. wal日志是保存数据库文件修改,用于出现问题进行回滚,修改的脏数据页不会立即刷新到磁盘。
  2. 事务检查点,每次产生检查点的时候,都会强制将脏数据刷回磁盘,因此我们需要控制检查点的频率
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以和你分享一些关于 PostgreSQL 的学习笔记。 1. PostgreSQL 是什么? PostgreSQL 是一种开源的关系型数据库管理系统,它支持 SQL 语言和 ACID 事务处理,并且具有丰富的特性和扩展性,可用于大型企业应用、Web 应用和嵌入式应用。 2. PostgreSQL 的特点 PostgreSQL 具有以下特点: - 开源免费 - 支持 ACID 事务处理 - 支持 SQL 语言 - 支持复杂查询和数据类型 - 支持存储过程和触发器 - 可以扩展和定制 - 可以跨平台运行 3. PostgreSQL 的安装 在 Windows 平台下,可以从官网下载 Windows 安装程序进行安装。在 Linux 平台下,可以使用包管理器安装,例如 Ubuntu 可以使用以下命令进行安装: ``` sudo apt-get install postgresql ``` 4. PostgreSQL 的基本操作 创建数据库: ``` CREATE DATABASE databasename; ``` 创建表: ``` CREATE TABLE tablename ( column1 datatype, column2 datatype, column3 datatype, .... ); ``` 插入数据: ``` INSERT INTO tablename (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 查询数据: ``` SELECT column1, column2, ... FROM tablename WHERE condition; ``` 更新数据: ``` UPDATE tablename SET column1 = value1, column2 = value2, ... WHERE condition; ``` 删除数据: ``` DELETE FROM tablename WHERE condition; ``` 5. PostgreSQL 的扩展 PostgreSQL 可以通过扩展来增强其功能,例如: - PostGIS:空间数据处理扩展 - PL/Python:Python 语言扩展 - pgAdmin:可视化管理工具 - pgpool-II:连接池和负载均衡工具 以上就是一些关于 PostgreSQL 的基本学习笔记,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值