四库全书的酷
格物致知,所有未知都可变成已知!
展开
-
postgres开发目录
各种知识链接原创 2023-08-25 22:21:50 · 881 阅读 · 0 评论 -
2.00004 优化器执行计划生成的流程是怎么样的?
插件执着人员注意:standard_planner()对它的Query输入做了修改,所以如果你想要多次进行plan,你最好做一个QUERY数据结构的副本。此状态在plan的命令中存在的所有level的子查询之间共享。subquery_planner将被递归调用,以处理在查询表达式和rangetable中找到的子查询节点。1、生成一个PlannerGlobal的Node节点,并初始化PlannerGlobal的部分变量。返回PlannerInfo结构体(root),其中包含plan子查询时生成的所有数据。原创 2024-07-01 11:06:27 · 71 阅读 · 0 评论 -
2.00001 优化器的代码架构
Path 模块中有开关,指示是否启用遗传算法进行优化,如果启用,且连接的表超过 11,就调用 geqo 目录中 的遗传算法进行优化。PostgreSQL 数据库的 查询优化的代码在 src/backend/optimizer 目录下,其中有 plan、 prep、 path、 geqo、 util 共 5 个子目录, plan 是总入口目录,它调用了 prep 目录进行逻辑优化,调用 path、 geqo 目录进行物理优化, util 目 录是一些公共函数,供所有目录使用。原创 2024-06-25 09:20:50 · 54 阅读 · 0 评论 -
2.00002 查询树初体验
其他地方引用RangTblEntry的话志勇使用RangeTblRef就行,其中rtindex表示在query->rtable链表中的位置。由于query->rtable中链表已经保存了RangeTblEntry的详细信息,出于保证数据不冗余以及数据一致。原创 2024-06-20 16:35:57 · 68 阅读 · 0 评论 -
5.00001 postgresql的辅助线程 - pg_stat架构整理
不同类型变量统计的类型和定义,如PgStatShared_Database、PgStatShared_Relation。在服务器启动时将磁盘上的统计信息读入内存,只能由startup进程或在单用户模式下调用。对共享统计项的后端本地标记。只要至少有一个这样的标记存在,共享的统计条目就不会被释放。如果有挂起的统计更新到共享统计,这些将存储在->pending中。为了便于管理,统计数据处理被分割成几个文件。用于特定类型统计的元数据。后端本地统计状态的集合。统计信息项的类型枚举。统计快照条目的哈希表。原创 2024-06-19 09:37:48 · 102 阅读 · 0 评论 -
3.00003 postmaster守护线程的启动流程调用以及辅助流程的启动流程调用是怎样的
StartChildProcess (postmaster.c:3928)主要动作如下:(和BackendStartup函数一样,都会调用postmaster_child_launch生成postmaster子进程)。3、在process_pm_child_exit函数中有如下判断:即其会在StartUp线程中拉起其余辅助线程。先判断如下:此时进入process_pm_child_exit(),在该入口会启动其余辅助线程;子进程的type,启动函数等信息。需要注意的是,如果要调用。原创 2024-06-12 15:49:46 · 45 阅读 · 0 评论 -
4.00003 postgresql的内存管理 - 我是怎么获得可用内存的?
然后计算合适的blksize,申请后插入context的block链表,再调用AllocSetAllocChunkFromBlock。该动作会将Context所属的set中的block链表中添加一个新的block。这些函数的实现如下,在全局变量mcxt_methods数组中指定函数指针。即调用入参MemoryContext的methods的alloc函数。由上面的mcxt_methods数组中指定函数指针即。指定了该MemoryContext的操作函数集合。从block中获取chunk。原创 2024-06-07 11:38:15 · 143 阅读 · 0 评论 -
4.00002 Postgresql的内存管理-一条sql执行过程中的内存上下文是怎么样的?
调试前动作,总结一条sql执行过程的内存上下文分配。原创 2024-06-03 11:11:57 · 111 阅读 · 0 评论 -
4.00001Postgresql的内存管理-从哪里开始了解内存管理之架构理解
AllocSetContextCreate函数如下介绍,主要作用为创建一个MemoryContext对象,#else#endif判断是否合理:检查参数是否与任意一个可用的自由列表匹配。我们不需要要求maxBlockSize的匹配。else如果存在合适的context_freelists,只需循环使用该上下文。-否则就重新申请。原创 2024-05-31 16:18:23 · 210 阅读 · 0 评论 -
3.00002 postgresql如何初始化内存上下文,都初始化了哪些上下文?
从版本 7. 1 开始,系统实现了新的内存管理机制, 这样使得运行时大多数内存分配操作在各种语义的内存上下文( MemoryContext) 中进行 。 内存上 下文将放时将会释放在其中分配的所有内存,这样即使某些内存没有被任何指针指向或忘记了释 放,我们都可以通过释放内存上下文来避免这些内存泄漏 。 这一机制也使内存管理更加方便,开发 人员不必再费尽心思地处理内存军事放的工作。程序首先调用 MemoryContextInit 创建 TopMemoryContext 和 ErrorContext0。然后调原创 2024-05-29 15:09:10 · 148 阅读 · 0 评论 -
3.00001 postgres如何初始化系统参数?
其中保存的是struct config_int ConfigureNamesInt[]的地址。hash_search(dynahash.c:955)函数定义如下,其直接套用下层hash_search_with_hash_value函数。已经默认配置了初始值。在guc_tables.c中定义了参数类型对应的值如下:guc_tables.c:731。查看此时的conf变量,发现它的初始值中就conf->boot_val就是1!在guc_tables.h中定义了参数类型如下:guc_tables.h:21。原创 2024-05-28 18:03:37 · 72 阅读 · 0 评论 -
1.00002 编译postgresql导读
要完全理解PostgreSQL的话,通过调查源代码还是比较有效果的。要理解代码的话,可以按照目的自己追加必要的功能,改变一些功能的行为,大家可以最大限度的的享受开源带来的好处。这次为了让大家能够理解PostgreSQL的源代码,说明了PostgreSQL 9.1的全体结构,还有说明了代码树。然后还使用了调试器来追踪PostgreSQL的动作,接下来,看看PostgreSQL更详细的结构。原创 2024-05-27 15:39:05 · 27 阅读 · 0 评论 -
2.00003《Postgresql内幕探索》走读 之 查询优化
在PostgreSQL中,尽管9.6版本中实现的并行查询使用了多个后台工作进程,但一个后端进程基本上处理连接的客户端发出的所有查询。 解析器 Parser解析器从明文的SQL语句生成解析树。 分析仪/分析仪 Analyzer分析器/分析器对解析树进行语义分析,生成查询树。 重写器 Rewriter重写器使用存储在规则体系rules 计划员 Planner计划员从查询树中生成最有效执行的计划树。 执行者 Executor。原创 2024-03-04 18:06:40 · 311 阅读 · 0 评论 -
1.00001git源码clone后进行编译(带调试)
为了能使用gdb调试,需要使用debug模式调试,我自己之前编译的时候发现即使指定-enable-debug在编译的时候发现也使用了-O2,所以这里建议直接修改configure中的-O和-O2为-g,pg的数据指定-D的 位置,所以在一个环境中,一个编译出来的数据库可以有多个运行环境,或者可以有多个编译环境,多个运行环境,所以需要自己按需配置。找到root ALL = (ALL) ALL这一行,在下一行加入username ALL = (ALL) ALL。– 用户生成公匙,登录gitee。原创 2023-08-25 22:25:56 · 850 阅读 · 0 评论