- 博客(432)
- 资源 (6)
- 收藏
- 关注
原创 neon源码分析(7)SLRU WAL转KV
1. PG 的SLRU以CLOG为例,一个文件256KB作为一个SEG,一个SEG内有32个8KB页面,在REDO时,根据xid/32786定位SEG,xid%32定位PAGE,就可以进行REDO了。2. NEON 的核心工作就是把WAL转换写到KV存储,这里的KEY是SEGNO+PAGENO,V是XID、事务状态等信息。
2026-05-23 12:08:54
80
原创 Postgresql热迁移pgbench持续读写零中断
在两台真实机器上演示 QEMU Live Migration,VM 内运行 PostgreSQL,外部 pgbench 2 并发持续读写,迁移全程 **零失败事务**。证明 Neon 热迁移对 Postgres 连接完全透明。
2026-04-17 11:33:46
284
原创 hermes与hindsight
hermes终端里运行的AI Agent,用你配置的LLM作为大脑,通过工具跑命令、读写文件、操作浏览器、委派子 Agent,类似claw、claudecode等agent工具。
2026-04-15 12:20:23
1509
1
原创 Postgresql源码(158)pg_filenode.map文件作用relmap和redo流程(RM_RELMAP_ID = 7)
pg_filenode.map文件的作用和redo流程分析。
2026-03-10 23:06:26
639
原创 Postgresql源码(157)Redo系列MultiXact Redo (RM_MULTIXACT_ID = 6)
MultiXact Redo机制分析。
2026-03-10 21:15:00
580
原创 Postgresql源码(155)Redo系列CLOG Redo (RM_CLOG_ID = 3)
RM_CLOG_ID处理的是PG提交日志的修改。CLOG记录每个事务的最终状态(in_progress/committed/aborted/sub_committed),存储在 `pg_xact/` 目录下的 SLRU 文件中。
2026-03-09 21:30:00
609
原创 Postgresql源码(154)Redo系列Storage Redo (RM_SMGR_ID = 2)
RM_SMGR_ID处理的是PG的文件层修改,调用smgr提供的接口干活。只做创建 和 truncate,不做文件删除。不做删除的原因是:**只有在事务成功提交才能物理删除文件;如果事务回滚,文件必须保留。** redo机制需要旧的基础页面+新的日志,如果是页面比日志新,就玩不转了。
2026-03-09 15:11:20
443
原创 Postgresql源码(153)Redo系列XLOG (RM_XLOG_ID = 0)
postgresql备库调试RM_XLOG_ID的redo流程
2026-03-08 11:26:01
479
原创 MySQL源码(3)异步IO核心逻辑简化调试(对比PG)
本文对比了MySQL InnoDB与PostgreSQL的刷脏机制差异。InnoDB采用异步IO(LIBAIO+O_DIRECT)持续刷脏,通过io_submit提交请求后由后台线程io_getevents收割结果,配合fsync确保数据落盘,性能更平稳。PostgreSQL则依赖双缓冲机制,通过write()+fsync()批量刷脏,易造成I/O毛刺。测试案例展示了O_DIRECT模式绕过page cache直接落盘,而缓冲I/O需依赖fsync同步刷盘。
2026-02-24 17:26:29
670
原创 MySQL源码(1)写盘流程总览
MySQL的INSERT操作流程主要分为七个阶段:1)SQL协议层接收与分发,处理客户端命令;2)SQL解析与重写,进行语法分析和查询重写;3)SQL执行层,执行权限检查、表锁定和DML操作;4)InnoDB存储引擎插入,转换行格式并处理事务;5)B+树插入与Undo日志记录;6)事务提交,处理Binlog组提交和InnoDB提交;7)脏页刷盘,通过Page Cleaner线程和Doublewrite机制确保数据持久性。整个过程涉及redo log、undo log、binlog等多种日志机制,以及buff
2026-02-11 16:13:06
608
原创 mysql参数explicit_defaults_for_timestamp问题
explicit_defaults_for_timestamp = OFF是第一列的行为非常奇葩,而且会影响后面的表列。
2025-12-19 16:07:27
450
原创 Overlay网络搭建实战
- 搭建Overlay虚拟网络的常见方式是gre、IPIP。- 隧道IP必须配置对应的隧道协议才能传输,其他机器必须配置对应的隧道才能访问。- PostgreSQL绑定隧道IP后,可支持通过物理IP和Overlay IP多地址访问。
2025-11-18 10:59:24
527
原创 OpenTenBase源码(2)三种数据重分布方式举例
OpenTenBase执行器是pull模型的分布式加强版本,主要做了针对分布式优化。**为了获取最大并行度,将计划切为Remote Subquery Scan,发到dn的不同进程上执行。**
2025-09-28 17:21:29
303
原创 Postgresql源码(148)hash表的调试方法与技巧
处理实际问题时,经常需要调试hash表,例如需要gdb查看hash表中的数据结构等等。本篇结合实例给出一些使用方法技巧,后续遇到问题可以快速通过gdb查看hash表内容。
2025-08-11 16:52:50
504
原创 Postgresql源码(147)Nestloop流程与Instrumentation简单分析
摘要:NestLoop连接算法采用双层循环结构,外层遍历外表元组,内层遍历内表元组。每对元组需先通过ON条件,再检查WHERE条件。支持参数化内表查询,可将外表字段值传递给内表。执行流程包括:获取外表元组→参数化内表→重扫描内表→获取内表元组→处理未匹配的LEFT/ANTI JOIN→检查连接条件→返回符合条件的结果。EXPLAIN ANALYZE通过InstrStart/StopNode记录执行时间和处理元组数。
2025-07-15 16:26:14
1025
原创 Postgresql源码(146)二进制文件格式分析
PostgreSQL在Linux平台生成ELF格式的可执行文件,通过readelf和gdb工具可分析其结构。
2025-06-05 17:22:59
878
原创 Postgresql源码(145)优化器nestloop评估不准问题分析
最近遇到一个问题,评估行数和真实行数存在较大差距,导致计划不准的问题。nestloop内表评估是根据外表的参数来的。因为外表驱动表每取一条,内表才能做查询。所以这里外表的一条数据对内表来说就是参数。内表使用参数化路径来评估行数。本篇针对这个实例对参数化路径行数评估做一些分析。
2025-05-01 11:23:50
1339
原创 Postgresql源码(144)LockRelease常规锁释放流程分析
最新遇到一个共享内存损坏导致常规锁释放报错warning "you don't own a lock of type"的问题。本篇对常规锁的概念做一些回顾,顺便分析下释放锁的流程。
2025-04-30 15:18:35
1050
oracle core essential internals for dbas and developers
2024-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅