PostgreSQL内核
文章平均质量分 83
mydownloador
这个作者很懒,什么都没留下…
展开
-
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询二:SQL解析为parsetree ...
话说查询“selectcname, comp from test1, test2 where test1.id=test2.id;” 发送到服务器端,走查询分支exec_simple_query,先调用start_xact_command初始化了事务管理相关对象和资源,接着调用pg_parse_query,通过Lex和Yacc...2012-10-09 19:50:55 · 223 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十六:shmem中初始化BgWriter...
这一节pg初始化后台写进程(BgWriter)用到的相关结构,通过BgWriterShmemInit例程实现。主要是初始化了一个BgWriterShmemStruct结构,并使用了面向过程C语言编程的一个技巧,把这个结构中的固定长度数组BgWriterRequest requests[1]扩充成NBuffers个(根...2012-03-28 21:10:48 · 108 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询五:规划成plantree
话说查询“selectcname, comp from test1, test2 where test1.id=test2.id;” 发送到服务器端,走查询分支exec_simple_query,先调用start_xact_command初始化了事务管理相关对象和资源,接着调用pg_parse_query,通过Lex和Yac...2012-10-31 20:37:48 · 197 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十五:shmem中初始化ProcSignal...
这一节pg初始化非postmaster进程间发送信号用到的相关结构,在共享内存里通过信号交互,通过ProcSignalShmemInit例程实现。主要是初始化了MaxBackends +NUM_AUXPROCTYPES =164个(默认是100+64个,可以设置)ProcSignalSlot结构的数组,以供非...2012-03-22 22:16:58 · 122 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十四:shmem中初始化PMSignal...
这一节pg初始化postmaster子进程给postmaster进程发送信号用到的相关结构,在共享内存里通过信号交互,通过PMSignalShmemInit例程实现。主要是初始化了一个PMSignalData结构,并使用了面向过程编程的一个技巧,把这个结构中的固定长度数组sig_automatic_t PMChildFla...2012-03-18 18:43:23 · 125 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十三:shmem中初始化SharedInvalidationState...
这一节pg初始化管理共享失效信息状态缓存所用到的相关结构,通过CreateSharedInvalidationState例程实现。共享失效消息主要涉及系统目录、逻辑表、物理表文件、数据库等。 1先上个图,看一下函数调用过程梗概,中间略过部分细节初始化共享失效状态缓存方法调用流程图...2012-03-14 20:34:52 · 151 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十二:shmem中初始化SharedBackendStatus...
这一节pg初始化共享后台进程状态数组SharedBackendStatus和多个字符串缓存,通过CreateSharedBackendStatus例程实现。1先上个图,看一下函数调用过程梗概,中间略过部分细节 初始化SharedBackendStatus方法调用流程图...2012-03-11 21:01:21 · 129 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十六:启动进程三:CheckPointGuts刷出共享内存里所有数据 ...
话说启动进程调用StartupXLOG启动xlog,根据情况,如果需要就排除系统故障引起的数据库不一致状态,做相应的REDO或UNDO,然后创建一个检查点,把所有共享内存磁盘缓冲和提交数据缓冲写并文件同步到磁盘、把检查点插入xlog文件、更新控制文件,使数据库达到一种状态。这节接着讨论启动进程在创建检查点时调用的...2012-07-12 16:24:19 · 190 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十一:shmem中初始化SharedProcArray...
这一节pg初始化进程表,通过CreateSharedProcArray例程实现,该例程中初始化的相关结构主要是为了支持维护一个所有活跃backend进程的PGPROC结构的未排序数组。尽管多处用到此数组,但主要是作为确定当前运行进程的事务集合的一种方式。 1先上个图,看一下函数调用过程梗概,中间略过部分细节 ...2012-03-08 21:32:55 · 112 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十七:ServerLoop
话说main()->PostmasterMain()->StartupDataBase(),fork了启动进程,根据情况处理系统故障并启动了xlog,然后启动进程退出。Postmaster进程响应启动进程退出信号,fork了后台写进程、WAL日志写进程、AUTOVACUUM进程、归档进程、统计进程这些辅助进程...2012-07-08 19:30:24 · 164 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十:shmem中初始化PROC索引、辅助进程和信号...
这一节pg初始化进程表,通过InitProcGlobal例程实现,在postmaster或standalone进程启动时初始化全局进程表。pg还创建了支持被请求的backend进程时每个backend进程需要的信号。以前pg仅在backend进程实际启动时分配信号,但是这样不好,因为这样使postgres在加载时失败,很多unix系统被配置/...2012-03-05 20:35:54 · 135 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号九:shmem中初始化Predicate锁...
这一节pg初始化predicate锁,支持可序列化事务隔离。通过InitPredicateLocks例程实现,主要是干了下面这么几件事:A创建了哈希表"PREDICATELOCKTARGET hash"。B在上面的哈希表里增加了ScratchTargetTag结构的索引C创建了哈希表...2012-02-29 21:10:17 · 160 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号八:shmem中初始化常规锁管理器...
这一节pg初始化锁管理器,通过InitLocks例程实现,主要是创建了三个哈希表。第一个哈希表"LOCKhash"用于管理锁,第二个哈希表"PROCLOCKhash"用于管理进程锁,第三个"LOCALLOCKhash"用于管理本地锁信息。其中第一个和第二个哈希表都是共享哈希表,第三个是非关系哈希表。初始化第三个哈希表"LO...2012-02-27 20:43:00 · 170 阅读 · 0 评论 -
PostgreSQL的内存管理机制十二:共享内存/shmem分配
pg的内存除了AllocSet/MemoryContext外,另一个主要部分就是共享内存(shared memory)。这一节讨论共享内存(简写shmem)的分配。pg在reset_shared()这个函数里,计算数据缓冲、xlog、clog、共享进程、子事务、并发控制、轻量级锁、backend进程等需要的共享内存,调用shm...2012-02-23 21:40:25 · 780 阅读 · 1 评论 -
PostgreSQL启动过程中的那些事十六:启动进程二
这节主要讨论启动进程到了StartupXLOG。根据情况,如果需要就排除系统故障引起的数据库不一致状态,做相应的REDO或UNDO,然后创建一个检查点,把所有共享内存磁盘缓冲和提交数据缓冲写并文件同步到磁盘、把检查点插入xlog文件、更新控制文件,使数据库达到一种状态,设置共享内存中XLogCtl、ShmemVariableC...2012-06-24 16:32:54 · 150 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十八:bgwriter进程一
话说main()->PostmasterMain()->StartupDataBase(),fork了启动进程调用,调用StartupXLOG方法,启动XLOG、验证数据库一致性、根据情况做数据库恢复和创建检查点,然后启动进程退出。Postmaster进程响应启动进程退出信号,启动了后台写进程、WAL日志写进程、...2012-07-23 20:18:40 · 222 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十七:shmem中初始化AutoVacuum相关结构...
这一节pg初始化AutoVacuum系统和进程用到的相关结构,通过AutoVacuumShmemInit例程实现。主要是初始化了一个AutoVacuumShmemStruct结构和autovacuum_max_workers个(默认3个,可以根据GUC参数设置)结构组成的链表,以供AutoVacuum相关进程使用。Au...2012-04-10 20:35:07 · 108 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询一:开启事务
在《PostgreSQL服务过程中的那些事二:pg服务进程处理简单查询概览》里话说以下面的例子对简单查询分支进行讨论,并给出了简单查询方法调用序列,下面就从这儿开始,先回顾一下上节点内容。进入简单查询分支处理方法exec_simple_query后的处理基本上涵盖了《数据库系统实现》这本书里的内容。处理量相当大,先根据流程图概览一下处理过程...2012-09-25 19:55:40 · 206 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.八:加载DB基础设施,完成服务进程初始化...
话说调用InitPostgres方法给portgres服务进程做相关初始化,这个方法里初始化了relcache和catcache,初始化了执行查询计划的portal的管理器,填充本进程PGPROC结构相关部分成员等,上一节讨论了portal管理环境的初始化,这一节继续讨论剩余的相关初始化。 1...2012-09-18 21:02:18 · 231 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事三:pg服务进程中的内存上下文
题外话:年底了,就以这篇博文结束2012吧 总结回顾一下pg服务进程中的内存上下文吧。 Pg的内存管理就像经济体制,计划经济和市场经济并存,主要是共享内存和内存上下文。共享内存就是计划经济,启动时根据各相关参数计算好大小就固定了,使用时也严格按照计划使用。内存上下文就是市场经济,这一部分...2012-12-31 15:07:41 · 218 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.七:初始化portal管理环境 ...
话说调用InitPostgres方法给portgres服务进程做相关初始化,这个方法里初始化了relcache和catcache,初始化了执行查询计划的portal的管理器,填充本进程PGPROC结构相关部分成员等,上一节讨论了relcache管理环境的初始化,这一节继续讨论执行sql的portal管理器...2012-09-11 19:58:05 · 187 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.六:初始化系统表缓存catcache...
话说调用InitPostgres方法给portgres服务进程做相关初始化,这个方法里初始化了relcache和catcache,初始化了执行查询计划的portal的管理器,填充本进程PGPROC结构相关部分成员等,上一节讨论了relcache管理环境的初始化,这一节继续讨论catcache的初始化。...2012-09-04 20:51:44 · 192 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一.五:初始化relcache管理环境...
话说调用InitPostgres方法给portgres服务进程做相关初始化,这个方法里初始化了relcache和catcache,初始化了执行查询计划的portal的管理器,填充本进程PGPROC结构相关部分成员等,这一节讨论这个方法。 1先看InitPostgres...2012-08-28 20:47:21 · 108 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询梗概
话说客户端发起请求,pg服务器为该请求启动一个postgres访问进程为该客户端通过访问,建立了连接。这个postgres访问进程进入无限循环,等待客户端请求并为其通过服务,直到进程终止,连接断口。这节就看客户端向postgres服务进程发出请求的处理过程。 1Postgres服务进程处理...2012-08-21 21:04:32 · 111 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程二:建立连接完成
3这节主要讨论pg服务进程postgres进程到了PostgresMain,所有后台进程,交互或其它进程从这儿开始。进入PostgresMain后,解析客户端命令行参数dbname;做文件、存储、缓存的初始化;设置合适的信号处理句柄;调用InitPostgres方法给portgres服务进程做相关初始化,...2012-08-13 18:50:30 · 117 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十八:shmem中初始化WalSender和WalRecv相关结构...
1先上个图,看一下函数调用过程梗概,中间略过部分细节初始化walsender和walreceiver相关结构方法调用流程图 2初始化xlog相关结构话说main()->…->PostmasterMain()->…->reset_shared()...2012-04-17 19:20:31 · 128 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事一:启动postgres服务进程一
到pg服务进程了,打算搞一个完整但简单的查询例子,从解析树到分析树到执行计划树,简论一下pg对于查询的整个处理过程(复杂点的各种树的图就太大了)。 话说pg启动后,postmaster进程进入无限循环,等待客户端请求并为之提供请求的服务(参见《pg启动过程中的那些事十七:serverloop》)。在无限循环里,postmas...2012-08-08 14:42:30 · 326 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十九:walwriter进程二
3这节主要讨论walwriter进程到了WalWriterMain,设置合适的信号处理句柄,创建一个资源属主以保持对本进程资源的跟踪,创建一个本进程的所有工作都在其内做的内存上下文"Wal Writer",创建这个内存上下文是为了本进程在错误恢复期间能重置context并且因此避免可能的内存泄漏。设置错误跳跃点。接着...2012-08-03 16:53:23 · 109 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十九:walwriter进程一
话说main()->PostmasterMain()->StartupDataBase(),fork了启动进程调用,调用StartupXLOG方法,启动XLOG、验证数据库一致性、根据情况做数据库恢复和创建检查点,然后启动进程退出。Postmaster进程响应启动进程退出信号,启动了后台写进程、WAL日志写进程...2012-08-01 17:26:40 · 183 阅读 · 0 评论 -
PostgreSQL服务过程中的那些事二:Pg服务进程处理简单查询六:执行器执行
话说查询“select cname, comp from test1, test2 wheretest1.id=test2.id;” 发送到服务器端,走查询分支exec_simple_query,先调用start_xact_command初始化了事务管理相关对象和资源,接着调用pg_parse_query,通过...2012-11-07 20:13:26 · 284 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事十八:bgwriter进程二
3 这节主要讨论bgwriter进程到了BackgroundWriterMain,设置合适的信号处理句柄,创建一个资源属主以保持对本进程资源的跟踪,创建一个本进程的所有工作都在其内做的内存上下文"Background Writer",创建这个内存上下文是为了本进程在错误恢复期间能重置context并且因此避免可能的内...2012-07-27 07:25:13 · 109 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号七:shmem中初始化bufferpool...
pg初始化完shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化管理各种事务和事务本身相关结构的实例。然后就是初始化缓冲池(buffer pool)。 缓冲区(buffers)存在于一个空闲内存块列表和一个哈希表查询数据结构。下面简述一下和缓冲池相关的概念。 ...2012-02-15 20:12:03 · 182 阅读 · 0 评论 -
PostgreSQL的存储系统二:REDOLOG文件存储结构
Pg XLOG文件(常说的REDOLOG)名字的命名方法是在XLogFileName宏里定义的,分别由时间线ID、日志ID、段ID的八位16进制数依次构成。例如00000001000000010000008F。#define XLogFileName(fname,tli, log, seg) \...2012-06-20 19:56:54 · 176 阅读 · 0 评论 -
PostgreSQL的存储系统一:控制文件存储结构
Pg 控制文件pg_control里存储的数据是一个ControlFileData结构。控制文件尽量保持小于512个字节以使其适合一个典型的磁盘驱动的物理簇的大小。这会减少由于电源故障而写控制文件直接失败的可能性。但控制文件的物理大小是8K,这个远大于512个字节。这样做是为了控制文件格式变化时保持物理大小不变,如果正在读一个不兼容的文件,以使...2012-06-20 19:45:36 · 158 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事八:设置文件描述符个数
这一节pg在postmaster启动时估算数据库的要打开的文件数,设置VFD数。Pg用“虚拟”文件描述符(VFDs)缓存来处理打开的文件。因各种原因服务器打开很多文件描述符,包括基表、临时文件(例如排序和hash spool files)和像那样随机对C例程库的调用;超过系统对单进程能打开的文件数的限制是很容易的。操作...2012-05-21 21:20:36 · 111 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号二十:shmem中初始化堆同步扫描、pg子进程相关结构...
这一节pg初始化堆扫描同步支持用到的相关结构。 堆扫描同步是当多个进程在同一个表上做顺序扫描(sequential scan),pg尝试保持他们同步以减少整体I/O需求。这个目标是读每一个页到共享内存仅一次,且使所有参与扫描这个页的进程在这个页被替换出共享内存前处理这个页。 ...2012-05-14 21:16:46 · 116 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号五:shmem中初始化multixact...
pg初始化shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化xlog。然后依次初始化clog、subtrans、twophase、multixact。安排按clog、subtrans、multixact、twophase的顺序写,把twophase...2012-01-12 21:22:55 · 224 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号:四 shmem中初始化subtrans...
pg初始化shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化xlog。然后依次初始化clog、subtrans、twophase、multixact。安排按clog、subtrans、multixact、twophase的顺序写,把twophase...2012-01-11 21:15:02 · 187 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号十九:shmem中初始化BTree相关结构 ...
这一节pg初始化BTree用到的相关结构,通过BTreeShmemInit例程实现。主要是初始化了一个BTVacInfo结构,并使用了面向过程C语言编程的一个技巧,把这个结构中的固定长度数组BTOneVacInfo vacuums[1]扩充成MaxBackends个(根据默认值100或GUC参数的设置得到...2012-04-24 21:34:47 · 125 阅读 · 0 评论 -
PostgreSQL启动过程中的那些事七:初始化共享内存和信号三:shmem中初始化clog
pg初始化完shmem,给其加上索引"ShmemIndex"后,接着就在shmem里初始化xlog。然后依次初始化clog、subtrans、twophase、multixact。安排按clog、subtrans、multixact、twophase的顺序写,把twophase...2012-01-09 19:45:32 · 105 阅读 · 0 评论