首页
学习
活动
专区
工具
TVP
发布

Postgresql源码分析

专栏成员
423
文章
295442
阅读量
57
订阅数
Postgresql源码(135)生成执行计划——Var的调整set_plan_references
全局结构,包含了跨多个查询级别的信息。例如一个包含子查询或CTE的查询中,每个子查询都会有自己的 PlannerInfo结构,会共享同一个PlannerGlobal。包含了:
mingjie
2024-06-07
810
Postgresql源码(134)优化器针对volatile函数的排序优化分析
上一篇对路径的生成进行了分析,通过make_one_rel最终拿到了一个带着路径的RelOptInfo。本篇针对带volatile函数的排序场景继续分析subquery_planner的后续流程。
mingjie
2024-05-29
890
Postgresql源码(129)JIT函数中如何使用PG的类型llvmjit_types
llvmjit_types.c里面定义了一些类型的变量,这些变量的bitcode在初始化时(llvm_create_types),会加载到module中(llvm_types_module)。然后再通过llvm_pg_var_type函数,把类型读取出来保存到全局变量中:
mingjie
2024-05-24
530
Postgresql源码(130)ExecInterpExpr转换为IR的流程
表达式计算在之前做过很多相关的分析了,本篇主要关注ExecInterpExpr如何转换为IR。
mingjie
2024-05-24
620
Postgresql源码(131)行锁的原理分析
行锁是一种用于控制并发访问的机制,可以确保同一时间只有一个事务可以修改或删除特定的行数据。本文对行锁的原理做一些分析。
mingjie
2024-05-24
590
Postgresql源码(132)分布式行锁的原理分析
PG中的行锁在上一片中做了分析《Postgresql源码(131)行锁的原理分析》,本篇对分布式PG(PGXL)中的行锁做一些分析。(版本:Postgres-XL 10alpha2)
mingjie
2024-05-24
580
Postgresql源码(133)优化器动态规划生成连接路径的实例分析
生成基础关系的path:set_base_rel_pathlists,执行后生成的PATH在RelOptInfo数组中保存:
mingjie
2024-05-24
440
Postgresql源码(128)深入分析JIT中的函数内联llvm_inline
上面给的用例函数的编译执行是在投影列中的(无JIT投影列执行可以参考这篇《Postgresql源码(127)投影ExecProject的表达式执行分析》)。
mingjie
2024-05-09
1080
Postgresql中JIT函数能否inline的依据function_inlinable
在JIT inline函数的过程中,会通过函数的bc代码,经过一系列规则、成本的判断来决定函数能否Inline,本篇重点分析这段逻辑:function_inlinable。
mingjie
2024-05-09
610
LLVM的ThinLTO编译优化技术在Postgresql中的应用
链接时优化(Link-time optimization,简称LTO)是编译器在链接时对程序进行的一种优化。它适用于以文件为单位编译程序,然后将这些文件链接在一起的编程语言(如C和Fortran),而不是一次性编译(如Java的即时编译(JIT))。
mingjie
2024-05-07
1290
Postgresql源码(127)投影ExecProject的表达式执行分析
对于这样这一条查询来说,每扫描一行,都会调用投影函数ExecProject,完成最终结果的构造。
mingjie
2024-05-01
1410
使用Perf诊断PostgreSQL性能问题
但偏向于debug的参数会造成性能降低,生产上也不一定这样编,部分堆栈缺失也不妨碍整体性能分析。
mingjie
2024-04-25
1581
Postgresql源码(126)TupleStore使用场景与原理分析
调用SPI_execute_plan_extended执行后,可以看到tstore中有了两条结果。
mingjie
2024-04-18
1070
Postgresql源码(125)游标恢复执行的原理分析
不在执行exec_prepare_plan直接执行exec_dynquery_with_params:
mingjie
2024-04-16
940
iperf3使用记录
-l参数可以控制发包大小,默认是128KB的包,可以用tcpdump抓下应用发包大小,做下模拟。
mingjie
2024-04-09
1500
Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析
heap_update(Relation relation, ItemPointer otid, HeapTuple newtup, ...)
mingjie
2024-02-21
1570
Postgresql源码(123)事务提交时三段资源释放分析ResourceOwnerRelease
三阶段释放是指ResourceOwnerRelease函数在使用时需要调用三次,按固定顺序调用每次删除特定的资源:
mingjie
2024-02-20
1540
Postgresql源码(122)Listen / Notify与事务的联动机制
Notify和Listen是Postgresql提供的不同会话间异步消息通信功能,例子:
mingjie
2024-02-19
1520
Postgresql源码(121)事务状态中childXids的作用
子事务提交后,将xid记录到父事务的childXids,父事务的childXids就表示下面已经提交的子事务,这些子事务xid在后续mvcc计算中,会完全等效与当前的事务xid。
mingjie
2024-02-19
810
Postgresql源码(120)事务XID分配与主备XID同步
确保父事务有 XID,以便子事务总是拥有一个比其父事务更新的 XID。这里不能递归调用,否则如果我们处于一个巨大的子事务堆栈的底部,而这些子事务还没有分配 XID,可能会遇到栈溢出的问题。
mingjie
2024-02-05
1550
点击加载更多
社区活动
AI代码助手快速上手训练营
鹅厂大牛带你玩转AI智能结对编程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档