小麦带你看postgres(代码模块结构)

初始化部分(Initialization)


 

bootstrap:和系统表相关。

main:传递参数到后台的pg进程。

postmaster:控制pg服务开关,创建共享内存,循环等待连接并分配服务。

libpq:与子进程通讯相关的库。

 
查询部分(Main Query Flow)

tcop:交警,分配请求到对应模块如解析器、优化器、执行器和命令行功能。

parser:把sql语句转化成查询执行树。

rewrite:规则和视图支持部分。

optimizer:优化查询路径生成计划。

      optimizer_path:生成所有可能的路径,检查表连接顺序,where条件限制,优化表的统计信息,对于可执行的计划评估开销。

      optimizer_geqo:遗传(或者是祖传?)查询优化器评估的路径对于要连接的表,当表的数量很少时会给很优化的结果,表太大就直接给一个一般的,可以通过参数控制是否使用这个功能。      

      optimizer_plan:拿着“optimizer_path”的结果输出最小开销的路径。

optimizer_prep:处理特殊的查询计划。

optimizer_util:优化支持部分。

executor执行复杂的计划包括,增删改查。算子举例:堆扫描、索引扫描、排序、连接、聚合、分组、去重等。

 

指令支持(Command Support)

commands:响应指令,以及简单的功能如vacuum、create table直接在元数据(catalog)上面做了。

catalog:元数据,直接操作系统表和目录,如索引、表、存储过程、操作符等。

access:大量的数据访问函数,如索引访问、堆访问、和事务日志。

      access_common:通用访问方法。

      access_gin:索引相关访问。

      access_gist:搜索树相关访问。

      access_hash:哈希相关访问方法。

      access_heap:存储数据行。

      access_index:被索引类型使用。

      access_nbtree:Lehman和Yao的B树管理算法。

      access_spgist:空间分片的全局特征信息相关访问。(GiST)

      access_transam:事务管理,如日志读写。(BEGIN/ABORT/COMMIT)

nodes:关于SQL查询的创建或者操作叫做节点,节点一般都有类型和特殊的数据结构,节点间经常被放在链表里。

storage:管理大量存储系统,提供统一后台访问。

      storage_buffer:共享缓存管理。

      storage_file:文件管理。

      storage_freespace:剩余空间映射表。

      storage_ipc:信号量和共享内存。

      storage_large_object:超大对象。

      storage_lmgr:锁管理。

      storage_page:页管理。

      storage_smgr:磁盘和存储设备管理。

utils:工具类。

      utils_adt:包含所有PG中內建数据类型(如bool、char、date)。

      utils_cache:因为PG支持很多随意数据类型,后台系统需要查询一个系统表关于这些随意类型时会先走这个缓存。

      utils_error:错误反馈,从后端反馈到前端去。

      utils_fmgr:函数管理,处理动态绑定的函数调用,和系统表中定义的函数调用。

      utils_hash:哈希函数管理,被缓存和内存管理器使用以做快速查询动态数据存储结构。

      utils_init:大量初始化。

      utils_mb:单字节和多字节的编码。

      utils_misc:冗余的东西(官方叫miscellaneous stuff)

      utils_mmgr:内存管理(PG进程本地)。

      utils_resowner:资源拥有者追溯。

      utils_sort:排序工具,如对元祖排序。

      utils_time:事务时间,与mvcc有关,判断一个元祖是过期了还是未提交。

基础支持(Support Facilities)


include:引用的文件。

lib:支持的库,大致看了下有二插堆,布隆过滤器。

port:兼容性部分。

regex:正则表达式。

snowball:语法库,雪球是一个语法库,各国语言的规范都有。

replication:通过日志迁移支持流式备份。

tsearch:文本查询库用于支持全文查询。

翻译自 (https://wiki.postgresql.org/wiki/Backend_flowchart


 
 


 

posted @ 2019-04-04 11:06  浙江小麦  阅读(730)  评论(0编辑  收藏  举报