PostgreSQL的Storage(2)-file 和 smgr

postgreSQL源码分析综述 2021SC@SDUSC 目录分工情况我负责的部分主要源码分析方式 分工情况 由官方的文档,可以知道postgreSQL的主要架构和上面的图片描述的一样。 所以我们组将核心源码的分析工作分成两部分,一部分负责postmaster,也就是守护进程;另一部分负责postgres,也就是服务进程。 我负责的部分 我和另一名组员负责postmaster部分。postmaster对于postgresql来说就像一个总控制台,一旦开启一个数据库实例(pg_ctl start),postmaster进程就开始运行。它的 阅读详情

 

smgr 做的很象一个接口,根据README的说明 只要下层实现相应的函数就能用smgr调用。现在的PostgreSQL中只剩md了。

file包含两个文件,一个buffile,一个fd。
fd可以说是最底层的了,函数都是直接调用open,close,read,write,lseek的。我开始还以为fd在smgr上层那。fd由于能打开的文件有限,用的是LRU的替换算法,实现得很简练。
buffile的函数基本都是调用fd的,主要用做临时文件什么的。

这几天看了buffer,file,smgr  他们之间的调用关系基本如图(可能不完善,毕竟storage下的其他目录还没看)

                      buffer
                          |
                       smgr
                       /
                     md       
                       /     buffile 
                        /    /
                          fd
                           |
                         OS

上层调用下层相应功能函数。buffile好象比较特殊,象Hashjoin等都是直接调用它的,没经过smgr和md的调用,这个等以后看到Hashjoin再说。

BTW: 本来画了张函数调用图,但不知道怎么贴上来。:-(

 

                                 

PostgreSQL中的tempfile探究 一、 概念简介 Tempfile,即临时文件。大家都熟悉的是当pgsql进程私有buffer不够用时,会将buffer内容dump到tempfile供postgres进程使用。常见的几个功能场景:ExecSorts、ExecHashJoin、ExecMergejoin、tempTable、CTE等,当work_mem或者是temp_buffers不足以容纳sql中间功能环节结果集时会产生tempfile。 这篇博文简单探讨下tempfile的生命周期,何时产生,何时消除,以及对于可能存在的问题的一些思考。 阅读详情

相关推荐

Win10管理员权限的‘暗门’:从mmc.exe被阻止,聊聊UAC与自动提权那些事儿

本文深入解析Windows 10中UAC(用户账户控制)与自动提权机制,探讨mmc.exe被阻止的深层原因及解决方案。从UAC工作原理到自动提权机制,再到具体诊断与修复步骤,帮助用户理解并解决权限管理问题,同时平衡安全性与便利性。

weixin_30521161的博客 419

Postgresql源码(5)缓冲区管理

Postgresql源码(5)缓冲区管理

InternalsOf 1713

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

海山数据库(He3DB)源码详解:海山PG 管理大型缓冲临时文件

Buffile.c 文件是 PostgreSQL 存储系统中的一个组成部分,专注于管理和优化临时文件的读写操作。它提供了一种对虚拟文件(由 fd.c 管理)的缓冲输入/输出(I/O)支持,以提高性能并减少资源消耗。

wukong3405的博客 659

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南)

本文为Mac用户提供三步安装PyMol开源版的详细指南,帮助科研人员告别许可证弹窗烦恼。通过Homebrew或MacPorts包管理器安装开源核心,并与商业版图形界面整合,实现无干扰的分子可视化研究体验。特别适合MacOS用户快速部署PyMol进行结构生物学分析。

weixin_28743405的博客 194

WPF+Prism+LiveCharts+materialdesignin 搭建WPF开发框架

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容。

T_Tboy的博客 3050

PostgreSQL的Storage(1)-buffer

 上星期开始了关于数据库的兴趣小组,书是 Database System--The Complete Book上星期讲的是硬件和文件组织形式本星期是索引,主要是B-Tree和Hash从今天开始,对照讲的东西,看看PostgreSQL的具体实现。PostgreSQL的关于storage的文件在src/backend/storage里,有buffer,file,page及相关的manage

ipiggg的专栏 1518

TWR-K65F180M评估板:基于Cortex-M4的嵌入式原型开发实战指南

在嵌入式系统开发中,微控制器(MCU)是核心,而围绕其构建的硬件平台则是将想法转化为可工作原型的关键。Cortex-M4内核凭借其高效的流水线、DSP指令集和浮点单元,为实时控制与信号处理提供了强大的运算能力。其技术价值在于,能够在较低功耗下满足工业控制、物联网网关等场景对能效比的严苛要求。为了快速验证系统设计,开发者常使用成熟的评估板来规避底层硬件设计的风险,直接聚焦于应用开发。本文以恩智浦的TWR-K65F180M评估板为例,深入解析其基于**ARM Cortex-M4**内核的K65 MCU的硬件架构

weixin_33582311的博客 370

PG存储介质管理器(SMGR)——存储管理器类型:postgresql-8.4.1/src/backend/storage/smgr

相关代码的路径如下所示:/src/backend/storage/smgr。外存管理负责处理数据库与外存介质(在PostgreSQL中只实现了磁盘的管理操作)的交互过程。在PostgreSQL中,外存管理由SMGR(主要代码在smgr.c中)提供对外存操作的统一接口。SMGR负责统管各种介质管理器,会根据上层的请求选择具体的截止管理器进行操作。这里介绍磁盘管理器,每个表文件在磁盘中都以一定的结构进行存储,针对磁盘,外存管理模块提供了磁盘管理器和VFD机制。在PG 8.4.1版本中,还为每个表文件创建了两个附

肥叔菌的博客 6895

Android15车载系统开机冷启动流程源码解析

本文主要介绍Android15车机系统开机冷启动的流程,暂不包含bootloader,仅从kernel开始直至Launcher首页展示。

jidapenglin28的专栏 253

人形机器人构成及成本估算(附报告)

这些执行器本身由螺杆、减速器、电机、传感器、滚珠轴承和编码器等组件构成。实现线性与旋转运动互转。人形机器人的运动系统可以由电驱动、液压驱动或气动驱动组成,但由于电驱动具有更高的精度和更快的响应速度,正在成为主流设计方案。执行器:NSK、THK、Harmonic Drive、Leaderdrive、Nidec、Moons。由螺杆、减速器、电机、传感器、轴承和编码器组成(如上为Tesla Optimus执行器设计示意)。传感器:Keyence、Robosense、Sensata、ATI、TE、Sony。

具身机器人和通用AI 1773

Postgresql-14.4-源码阅读02-ReadBuffer_common-后续再更新此篇-看的头大

参数名参数类型smgrcharforkNumForkNumberblockNumBlockNumber(uint32别名)modestrategyhitbool*

qq_45111959的博客 709

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深入 pgrust 源码:600+ crates 的模块化架构全景解析

pgrust 是一个用 Rust 完整重写 PostgreSQL 的开源项目,目标不止是"能跑",更是要超越原生 Postgres 与 ClickHouse 的性能。深入 pgrust 源码,你会发现它没有走"一个大 crate 塞到底"的路线,而是采用 600+ crates 的模块化架构,把数据库的每个子系统都拆成了独立、可编译、可测试的单元。本文带你从零看懂这套架构的布局逻辑、核心目录与阅读

gitblog_00700的博客 356

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

PostgreSQL 源码解读(91)- 查询语句#76(ExecHashJoin函数#2)

本节是ExecHashJoin函数介绍的第二部分,主要介绍了ExecHashJoin中依赖的其他函数的实现逻辑,包括ExecHashTableCreate、ExecChooseHashTableSize...

810

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Postgresql存储底层封装smgr源码分析

注:本专栏所有分析以函数为主线,必要数据结构会带入讲解;数据库版本为Postgresql10.16。 注:如有讨论的需要请email to jackgo73@outlook.com 概要 Postgresql外存管理器封装了与文件系统的所有接口,提供更高级、更适用于数据库的文件操作接口,这部分代码的位置: $ pwd /home/mingjie.gmj/dev/src/postgresql-10.16/src/backend/storage/smgr $ ll *.c -rw-r--r-- .

InternalsOf 2162

postgres源码解析52 磁盘管理器--1

postgres源码解析52 磁盘管理器--1

Serendipity_Shy 1627

pgstgresql 分区表

pgsql 创建分区表

weixin_46061449的博客 1665

PostgreSQL 源码解读(93)- 查询语句#77(ExecHashJoin函数#3)

本节是ExecHashJoin函数介绍的第三部分,主要介绍了ExecHashJoin中依赖的其他函数的实现逻辑,这些函数在HJ_NEED_NEW_OUTER阶段中使用,包括ExecHashJoinOut...

585

PostgreSQL中的等待事件wait_event

一、等待事件分类 事件类型 : 共有9个分类,每一类都由不同事件组成 /* ---------- * Wait Classes * ---------- */ #define PG_WAIT_LWLOCK 0x01000000U /* 等待LWLock */ #define PG_WAIT_LOCK 0x03000000U /* 等待Lock */ #define PG_WAIT_BUFFER_PIN 0x04000000U /* 等待访问数据缓冲区 */ #define

qq_43687755的博客 1万+

[PostgreSQL]存储器管理

本文是PostgreSQL源代码中pgsql/src/backend/storage/smgr/README一文的翻译,主要探讨了当前PostgreSQL中存储管理器系统的设计.

Bumanji的专栏 1579

pg 异常捕获

createfunctionstring_to_json(varchar)returnsjsonas$$ BEGIN return$1::json; EXCEPTIONWHENdata_exceptionTHEN return'{}'::json; END...

1066

【数据库系列】PostgreSQL 列的四种存储策略

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!用于设置列的存储策略。在 PostgreSQL 中,

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 518

postgresql源码学习(六)—— 回滚(中止)与清理事务

一、 AbortTransaction 1. gdb测试 会话1 会话2 2. 具体代码与跟踪 调用栈如下 static void AbortTransaction(void) { TransactionState s = CurrentTransactionState; TransactionId latestXid; bool is_parallel_worker; /* Prevent cancel/die interrupt while cleani

Hehuyi_In的博客 4072

postgresql源码学习(五)—— 提交事务

结束事务分为两类: 提交:CommitTransaction 回滚:AbortTransaction 一、 CommitTransaction 1. 流程图 2. 提交和刷盘步骤 上面流程图里最重要的是事务日志写回磁盘部分:RecordTransactionCommit(),保证已提交数据不会丢失。 if ((wrote_xlog && markXidCommitted && synchronous_commit > SYN...

Hehuyi_In的博客 5033

PostgreSQL的数据存储(四)---虚拟文件管理

3 虚拟文件管理 PG的本项功能称为:a cache of 'virtual' file descriptors (VFDs) 操作系统,对于资源的分配,存在限制,比如,一个进程,可以拥有多少子线程、可以同时打开多少个文件、可以使用的堆栈大小是多少等等。 而不同的操作系统,其限制是不一样的。 作为数据库管理系统,PG能够做到跨平台,对文件的管理,有自己的一套规则以屏蔽操作系统在文件打开...

jinghuainfo 229
上一篇: Google的BigTable
下一篇: 编程修养
ipiggg
博客等级 码龄21年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值