- 博客(7)
- 资源 (6)
- 收藏
- 关注
原创 Postgresql源码(24)ReadBuffer_common核心流程简化
总结:先走BufferAlloc拿一个buffer如果在内存中直接返回,如果不在内存中需要分配一个位置。如果有位置直接分配,如果没有位置需要clock sweep淘汰一个。拿到一个页面后,数据肯定是不对的,需要IO上来数据,如果页面本身有脏数据,需要先把页面Flush到存储再用。BufferAlloc出来的页面如果需要IO读会带着IO_IN_PROGRESS标志位和IO锁。ReadBuffer_common检查BufferAlloc有没有找到页面,如果没找到页面,也已经拿到一个带着IO标
2021-12-28 18:02:33 727
原创 Postgresql10分区表range实例
注意点1. PG10不能在父表上创建索引2. 极限优化索引可以创建条件索引3. 序列一定是要挂在父表上创建规则https://www.postgresql.org/docs/10/sql-createtable.htmlPARTITION BY { RANGE | LIST } ( { column_name | ( expression ) } [ opclass ] [, ...] )The optional PARTITION BY clause specifies a strateg
2021-12-16 15:59:30 1334
原创 Postgresql源码(23)Clog使用的Slru页面淘汰机制
SLRU页面选择函数SlruSelectLRUPage:选择一个空的或淘汰一个SLOT(可能触发IO),返回一个可用SLOTstatic intSlruSelectLRUPage(SlruCtl ctl, int pageno){ SlruShared shared = ctl->shared; /* Outer loop handles restart after I/O */ for (;;) { int slotno; int cur_count; int
2021-12-14 11:48:35 942 1
原创 Postgresql源码(22)CLOG内存结构图示
总结:32个lsn一组,一个页面能存8192 * 4 个lsn, 一个页面分成了1024个组。内存连续申请,头部指针尾部数据。内存连续申请,中间控制信息,每个页面对应中间几个数组中的一个位置。CLOG中一个页面常称为SLOT。.........
2021-12-13 17:03:21 939
原创 Postgresql源码(21)update生成XLOG过程&内容解析
(完整流程在log_heap_update)1 注册阶段(1)用两个registered_buffers记录新旧页面bufferXLogRegisterBuffer(0, newbuf, bufflags);XLogRegisterBuffer(1, oldbuf, REGBUF_STANDARD);(2)注册maindata【SizeOfHeapUpdate大小:14】XLogRegisterData((char *) &xlrec, SizeOfHeapUpdate);/* 关
2021-12-07 16:37:46 681
原创 Postgresql源码(20)日志组装写入流程图
组装过程:只有header信息会memcry到链表第一个data区域,其他信息例如页面image、元组内容等都是指针挂在后面的data区域写入过程:写入只需要遍历list,然后memcpy即可
2021-12-02 11:38:47 647
原创 Postgresql源码(19)日志注册数据结构
XLOG注册过程一个页面使用一个register_buffer槽位,最多5个页面 每个页面的其他信息使用rdata槽位形成链表,使用到的rdata用register_buffer的指针指向
2021-12-01 19:33:18 690
oracle core essential internals for dbas and developers
2024-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人