暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Introdunction

Maleah 2025-09-15
61

学习 《PostgreSQL 14 Internals》 介绍章节 小记

数据库

集簇初始化之后,PGDATA 包含三个相同的数据库:

  • template0 用于从逻辑备份中恢复数据或创建一个含有不同编码的数据库等情况,绝对不可修改此数据库。
  • template1 作为用户在集簇中创建的所有其他数据库的模板。
  • postgres 是一个常规的数据库,你可以根据需要使用。

表空间

  • pg_default 位于 PGDATA/base 目录中;除非明确选择了另一个表空间,否则它会被用作默认表空间。
  • pg_global 位于 PGDATA/global 目录中;它存储着整个集簇公共的系统目录对象。
  • 自定义表空间:可以指定任意目录,会在 PGDATA/pg_tblspc 目录中创建指向该目录位置的符号链接。

文件和分支

  • 主分支代表实际的数据:表行或者索引行。此分支适用于任何关系 (除了视图,视图中没有数据),文件以它们的数字 ID 命名,这些 ID 作为 relfilenode 的值存储在 pg_class 表中,pg_relation_filepath('relation_name')查看
  • 初始分支 init仅适用于无日志表 (使用 UNLOGGED 子句创建) 及其索引(UNLOGGED表的任何操作都不会写入预写式日志,操作快,无法恢复数据)
  • 空闲空间映射 fsm用于跟踪页内的可用空间,从而快速找到可以容纳被插入的新数据的页面,vacuum后会出现(表、索引)
  • 可见性映射 vm用于快速显示页面是否需要被清理或冻结(表)
0 1
all-visible 数据并不完全可见,即需要回表查看具体数据行是可见还是不可见 page所有tuple是可见的,无需回表
all-frozen(V9.6+) 含有非冻结的tuple 所有tuple均被冻结,eager mode下的vacuum可跳过该page

指路:IndexOnlyScan与VM文件

TOAST

阈值是 2000 字节(可以通过使用 toast_tuple_target 存储参数在表级别重新定义),超过该阈值需要使用TOAST机制
存储策略:

  • plain 意味着不使用 TOAST (此策略适用于已知是"短"的数据类型,例如整数类型)。
  • extended 允许压缩属性并将它们存储在单独的 TOAST 表中。
  • external 意味着长属性以未压缩的状态存储在 TOAST 表中。
  • main 需要先压缩长属性,只有在压缩没有帮助的情况下时,它们才会被移动到 TOAST 表中。

详情指路:PostgreSQL TOAST 的“碎碎念”

进程

1)PostgreSQL是进程结构
服务启动时,启动的第一个进程是 postgres,传统上称之为 postmaster。它负责创建所有其他进程 (类 Unix 系统使用 fork 系统调用实现) 并管理它们
2)主要的后台进程:
startup:在故障之后恢复系统
autovacuum:从表和索引中移除dead tuple
checkpointer:检查点
background writer:将脏页刷到磁盘
walwriter:将 WAL 写入到磁盘中
stats collector:收集统计信息(15版本取消收集统计信息的进程,统计信息不再使用文件和文件系统,而是使用动态共享内存)
3)服务器必须为每个客户端生成一个单独的后端进程。如果许多客户端都在尝试连接,可能会成为一个问题:

  • 每个进程都需要 RAM 来缓存系统目录表、预备语句、中间查询结果和其他数据。打开的连接越多,需要的内存就越多。
  • 如果连接是短而频繁的 (客户端执行一个小查询并断开连接),那么建立连接、生成新进程和执行无意义的本地缓存的成本过高。
  • 启动的进程越多,扫描它们的列表所需的时间就越多,而且这种操作非常频繁。因此,性能可能会随着客户端数量的增加而下降。
    这个问题可以通过连接池来解决,它限制了生成的后端进程的数量

相关SQL

-- 查看表的文件位置 SELECT pg_relation_filepath('table_name'); -- 查看文件的相关信息(大小,创建、访问及修改时间,是否目录) select * from pg_stat_file('absolution_path'); size | access | modification | change | creation | isdir ------+------------------------+------------------------+------------------------+----------+------- 8192 | 2025-09-09 10:10:41+08 | 2025-09-09 10:11:25+08 | 2025-09-09 10:11:25+08 | | f (1 row)
最后修改时间:2025-09-15 11:54:25
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论