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

小麦带你看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)








 

转载于:https://www.cnblogs.com/zhejiangxiaomai/p/10653693.html

更多相关:

  • 1. 申请合作伙伴ID (PID),Key (PKey)2. 发送请求  https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=100000353&redirect_uri=http://www.wodongni.com/loginReturn.asp...

  • 关注我的头条号,获取更多运维相关知识。你想了解哪方面的运维知识,请评论区告诉我,我会尽快更新~MySQL 数据库,基本上运维都会接触到,而对于数据库的性能优化,想必是大家比较关注的,下面分享一些调优技巧。先决条件安装 MySQL,版本大于 5.7有部分数据操作系统、数据库管理员权限MySQL 系统性能优化在系统层面,调整硬件和软件选项...

  • spring data jpa提供了多种查询方式,如下:方法名称查询继承Repository接口测试代码方法名称中支持的关键字(官方文档提供)使用JPA命名查询在User实体中定义jpql(类似于hql)jpql(百度百科)继承JpaRepository接口测试使用@Query查询和命名查询不同的是,将jpql写到了 dao 方法上,...

  • 转自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html   对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,本文只谈优化查询时如何看懂SqlServer查询计划。由于我对SqlServer的认识...

  • 一.实现基础功能之一(记账)   一个记账本最基础之一的功能就是记账,所以也是首先要解决的问题,我选择了上学期使用的MySQL数据库来对账本进行存储。   我选择记账的方法是分开记账,就是支出放在一个表,收入放在一个表,这样在数据库方面会比较的直观的看到,但是在显示的时候就会产生部美观的问题,就是支出和收入都是分开来的,没有办法按照时...

  • 在Navicat中,我们选中一个表,双击打开,这是如果要新建查询这个表的sql语句,可以直接用快捷键  ctrl+q  会自动打开查询窗口,并直接写好 sql:select * from (当前打开的表名) 我们直接在后面补全查询条件即可,非常方便。 转载于:https://www.cnblogs.com/libin6505/...