2026-06-16 | database · kernel | #postgresql #pg-kernel #mvcc #wal #vacuum #btree #query-planner #streaming-replication #logical-replication #buffer-manager #lock-manager #troubleshooting #pg-upgrade #pitr #postgresql-internals
从进程模型到磁盘页面、从 MVCC 到流复制——对 PostgreSQL 内核做完整的源码级拆解。不止步于源码分析:26 篇中 6 篇是运维实战——经典故障的根因与排查路径、性能调查的五层工具链、配置陷阱与恢复边界。面向想读懂 PG 内核源码、在生产环境排查过问题、准备给 PG 贡献代码的工程师。
2026-06-16 | database · kernel | #postgresql #pg-kernel #mvcc #clog #hint-bit #snapshot #slru #transaction-id #wraparound #procarraylock #innodb #undo-log
在已有 MVCC 文章基础上深入 PG 并发控制的三个基础设施:CLOG 的 SLRU 结构(事务状态位、页面格式、SLRU 淘汰)、hint bit 的写入时机和竞争问题(何时写、谁写、写坏了怎么办)、PG 14 snapshot scalability 优化的具体机制(ProcArrayLock 为什么是瓶颈、x…
2026-06-16 | database · kernel | #postgresql #pg-kernel #postmaster #shared-memory #backend-process #pgproc #lwlock #background-worker #fork #ipc
拆解 PostgreSQL 多进程架构的核心:Postmaster 的启动与信号处理、Backend 进程的 fork()→InitPostgres→主循环生命周期、CreateSharedMemoryAndSemaphores() 的共享内存初始化流程、PGPROC/ProcArray/PGXACT 等关键共享内存…
2026-06-16 | database · kernel | #postgresql #pg-kernel #page-layout #heap-tuple #toast #pageinspect #ctid #xmin #xmax #t-infomask #storage
拆解 PostgreSQL 的物理存储层:Page 的 8KB 布局(PageHeaderData、ItemId 数组、special space)、HeapTupleHeaderData 的字段语义(xmin/xmax/ctid/t_infomask/t_infomask2)、TOAST 外存机制的压缩阈值与四种策…
2026-06-16 | database · kernel | #postgresql #pg-kernel #wal #xloginsert #checkpoint #redo #recovery #wal-writer #wal-level #pg-waldump #xlogrecord #checkpoint-completion-target
拆解 PostgreSQL WAL 的完整内部机制:XLogInsert() 从分段锁到 WAL Buffer 的插入路径、XLogRecord 的物理布局(Header + Block Headers + Data)、Checkpoint 的两阶段流程与 IO 摊平算法、REDO 恢复的 RMGR 分发、wal_l…
2026-06-16 | database · kernel | #postgresql #pg-kernel #buffer-manager #shared-buffers #clock-sweep #bgwriter #pg-buffercache #buffer-pool #ring-buffer #double-buffering
拆解 PostgreSQL Buffer Manager 的核心机制:shared_buffers 的内部组织(BufferDescriptors 数组、Buffer Table hash table、buffer pool)、Clock sweep 替换算法的完整源码路径、buffer 四态状态机与 pin/unp…
2026-06-16 | database · kernel | #postgresql #pg-kernel #lock-manager #spinlock #lwlock #heavyweight-lock #deadlock-detection #row-locks #pg-locks #concurrency
拆解 PostgreSQL 锁管理器的完整架构:SpinLock 自旋锁的硬件原语与使用边界、LWLock 从 PG 9.4 前到 PG 16 LWLockWaitListLock 的三代演进、Heavyweight Lock 的 LockAcquire() 完整路径和锁表结构、死锁检测 DeadLockCheck(…
2026-06-16 | database · kernel | #postgresql #pg-kernel #transaction #subtransaction #savepoint #two-phase-commit #2pc #transstate #xid #wraparound #xact
拆解 PostgreSQL 事务系统的三层结构:事务状态机 TransState 的状态转换路径、子事务(savepoint)的 TransactionState 栈与 ResourceOwner 嵌套管理、两阶段提交(2PC)的 WAL 记录与 pg_twophase 状态文件格式、事务 ID 分配的 xidSto…
2026-06-16 | database · kernel | #postgresql #pg-kernel #vacuum #freezing #wraparound #autovacuum #visibility-map #free-space-map #index-only-scan #pgstattuple #bloat #pg-stat-progress-vacuum #transaction-id
拆解 PostgreSQL VACUUM 的完整内部流程:heap scan、dead tuple 回收、索引清理、FSM/VM 更新。深入可见性映射和空闲空间映射的结构设计,以及 Index-Only Scan 如何依赖 VM 判断页面全可见。解析 Freezing 机制与事务 ID 回卷防御,Autovacuum…
2026-06-16 | database · kernel | #postgresql #pg-kernel #parser #analyzer #rewriter #gram-y #query-tree #parse-analyze #pg-rewrite #view-expansion #rtable #jointree
拆解 PostgreSQL 查询编译的前两步:Parser 如何将 SQL 字符串转换为 RawStmt 语法树(基于 gram.y 的 Bison 语法文件),Analyzer 如何通过 parse_analyze() 完成表名/列名解析、类型推导和权限检查,Rewriter 如何基于 pg_rewrite 规则系…
2026-06-16 | database · kernel | #postgresql #pg-kernel #query-planner #statistics #cost-model #selectivity #analyze #histogram #mcv #stats-drift #create-statistics #random-page-cost #explain
拆解 PostgreSQL 查询优化器的决策基础:pg_statistic 中 MCV/histogram/correlation 的存储结构、ANALYZE 的采样流程与精度边界、clauselist_selectivity 如何逐层估算选择率、seq_page_cost 等代价常量的物理意义与调优依据、CREAT…
2026-06-16 | database · kernel | #postgresql #pg-kernel #query-planner #join-order #nested-loop #hash-join #merge-join #geqo #dynamic-programming #seqscan #indexscan #bitmapscan #explain-analyze #allpaths #joinpath
拆解 PostgreSQL 查询优化器的路径生成:make_one_rel() 从基表访问到 Join 路径的完整流程、四种扫描路径 (SeqScan/IndexScan/IndexOnlyScan/BitmapScan) 的创建条件、三种 Join 方式 (NestLoop/HashJoin/MergeJoin)…
2026-06-16 | database · kernel | #postgresql #pg-kernel #executor #volcano-model #expression-evaluation #hash-join #tupleslot #wait-event #pg-blocking-pids #explain-analyze
拆解 PostgreSQL 执行器的火山模型(ExecInitNode→ExecProcNode→ExecEndNode)、Hash Join 内存化实现、EEO 表达式求值的 opcode 编译与解释执行机制、TupleTableSlot 的三种数据承载方式(virtual/heap/minimal)。附带查询 h…
2026-06-16 | database · kernel | #postgresql #pg-kernel #jit #llvm #expression-evaluation #tuple-deforming #olap #query-execution #jit-compilation
拆解 PostgreSQL 的 LLVM JIT 编译机制:JIT 编译的触发决策流程(jit_above_cost 三级阈值)、LLVM 模块管理与惰性编译、表达式求值从 EEO opcode 到 LLVM IR 再到机器码的完整路径、Tuple 变形(deforming)的 JIT 加速原理,以及 JIT 在 O…
2026-06-16 | database · kernel | #postgresql #pg-kernel #btree #index #page-split #deduplicate #rightlink #high-key #bt-page-items #bt-metap #btpagiopaque
拆解 PostgreSQL B-Tree 索引的内核实现:BTPageOpaque 页面布局(high key / rightlink 的工程意义)、_bt_doinsert() 插入路径与 _bt_split() 页面分裂的完整流程(分裂点选择不是简单的 50/50)、PG 12+ 去重(deduplicate_i…
2026-06-16 | database · kernel | #postgresql #pg-kernel #gist #index #consistent #penalty #picksplit #point-ops #tsvector-ops #full-text-search #geometric-index #generalized-search-tree
拆解 PostgreSQL GiST 索引的抽象算子接口(Consistent/Union/Penalty/PickSplit)、深度优先搜索与 Consistent 过滤的组合逻辑、Penalty 引导插入路径与 PickSplit 决定分裂策略的完整流程,以及 point_ops 的几何距离搜索和 tsvecto…
2026-06-16 | database · kernel | #postgresql #pg-kernel #gin #inverted-index #full-text-search #tsvector #fast-update #pending-list #bitmap-scan #intarray
拆解 PostgreSQL GIN 索引的内部结构:entry tree、posting list、posting tree 三者各在什么条件下使用;Fast Update 的 pending list 设计与 gin_clean_pending_list 合并时机;gingetbitmap() 的 bitmap A…
2026-06-16 | database · kernel | #postgresql #pg-kernel #brin #hash-index #bloom-index #btree #index-selection #brin-revmap #page-range
过一遍 BRIN 索引的范围摘要哲学——用每个 page range 一条摘要替代逐行索引,在 1TB 的表上创建时间从小时降到秒级。同时讨论两条"不建 B-Tree"的高性价比路径:Hash 索引在 PG 10+ 的 WAL 安全边界和 Bloom 索引的多列任意组合过滤。附带代价对比表和建索引决策树。
2026-06-16 | database · kernel | #postgresql #pg-kernel #streaming-replication #wal-sender #wal-receiver #synchronous-replication #replication-slot #failover #timeline #split-brain #pg-rewind #wal-recovery #slot-overflow #pg-stat-replication
拆解 PostgreSQL 流复制的完整内核路径:WAL Sender 的 WalSndLoop→XLogSendPhysical 发送链路、WAL Receiver 的 WalRcvLoop 接收与恢复链路、同步复制的三种语义与等待机制、Failover 时 Timeline 的 fork 原理与 split-br…
2026-06-16 | database · kernel | #postgresql #pg-kernel #logical-replication #logical-decoding #reorder-buffer #pgoutput #publication #subscription #decode #conflict-detection #replication-slot #wal
拆解 PostgreSQL 逻辑复制的完整内核路径:LogicalDecodingContext 从 WAL 解码出逻辑变更的内部流程、Reorder Buffer 按 COMMIT 顺序重排事务与 snapshot 重建机制、pgoutput 输出插件的二进制协议与行过滤变换、Publication/Subscri…
2026-06-16 | database · kernel | #postgresql #pg-kernel #extensions #fdw #foreign-data-wrapper #postgres-fdw #hook #pushdown #planner #executor
拆解 PostgreSQL 扩展系统的两种核心机制:全局 hook 机制全景(planner_hook、ExecutorStart_hook、ProcessUtility_hook 等覆盖七个子系统)和 FDW(Foreign Data Wrapper)的 FdwRoutine 回调接口。重点分析 postgres_…
2026-06-16 | database · kernel | #postgresql #pg-kernel #monitoring #observability #pg-stat-statements #pg-stat-activity #pg-locks #pg-stat-replication #autovacuum #prometheus #alerting #pgbadger #pgcenter
不从 Grafana 模板照抄,而是从 PG 内核机制推导出必须监控的六个维度:连接与 wait_event、存储膨胀与 XID wraparound、WAL 与复制延迟、查询性能突变、锁等待链、以及 shared_buffers 命中率骗局。每个维度配具体 SQL 和指标解读,告警阈值给出内核依据而非拍脑袋数字,同…
2026-06-16 | database · kernel | #postgresql #pg-kernel #troubleshooting #connection-storm #transaction-id-wraparound #replication-slot #oom #idle-in-transaction #failure-modes #pg-stat-activity #pg-locks #pg-replication-slots
拆解 PG 生产环境中最危险的五种故障模式——连接风暴与 work_mem 连锁效应、事务 ID wraparound 危机完整时间线、replication slot 溢出多米诺效应、OOM 连锁 kill、长事务 idle in transaction 隐性破坏。每个故障给出可复现的触发方法、Mermaid 时序…
2026-06-16 | database · kernel | #postgresql #pg-kernel #performance #pg_stat_statements #explain #wait_event #pg_locks #perf #bpftrace #plan_cache_mode #lwlock #shared_buffers #pg_wait_sampling #pg_stat_kcache
不是工具箱罗列,而是一条按顺序推进的调查链:从 pg_stat_statements 定位可疑 queryid,到 EXPLAIN (ANALYZE, BUFFERS) 解剖执行计划,到 pg_stat_activity + wait_event 诊断等待类型,到 pg_locks + pg_blocking_pid…
2026-06-16 | database · kernel · ops | #postgresql #pg-kernel #pitr #pg_resetwal #pg_checksums #zero_damaged_pages #pg_dump #pg_restore #wal #corruption #recovery #timeline #pg_rewind
拆解 PostgreSQL 数据恢复路径的内部机制与操作边界:PITR 的三个关键窗口与 timeline fork 原理、pg_checksums 的校验粒度与盲区、pg_resetwal 的 hint bit 代价与 VACUUM FULL 陷进、pg_dump 并行调度的内部策略。重点在于每种操作做什么、不做什…
2026-06-16 | database · kernel · ops | #postgresql #pg-kernel #pg-upgrade #migration #hard-link #logical-replication #pg-dump #vacuumdb #disaster-recovery #inode #copy-on-write
拆解 pg_upgrade 的三种模式(--link 硬链接零拷贝、--clone CoW 快照、--copy 物理复制)的执行流程、内部机制和不可回滚的根本原因;逻辑复制跨版本迁移的低停机方案及序列/large object/DDL 三大盲区;四种常见坑的根因与应对;附带迁移方案决策树,从小库到大库选哪种方案一次说…
2026-06-16 | database · kernel · ops | #postgresql #pg-kernel #guc #configuration #shared-buffers #work-mem #effective-cache-size #random-page-cost #fsync #synchronous-commit #huge-pages #maintenance-work-mem #idle-in-transaction #log-lock-waits #deadlock-timeout #log-min-duration-statement #auto-explain #postgresql-tuning
逐一拆解 11 个最容易被误解和配错的 PostgreSQL GUC 参数:shared_buffers 的 double buffering 反噬、work_mem 作为'每个操作'而非'每个查询'的内存炸弹、effective_cache_size 和 random_page_cost 如何误导优化器走向灾难计划…