数据库修仙炼气篇十一——postgresql 存储管理

postgreSQL源码分析——存储管理——外存管理(1) 2021SC@SDUSC 概述 源码分析 总结 阅读详情

存储管理

内存管理

包括共享内存、本地内存、内存上下文、缓冲区的管理。

  • 共享内存

    共享内存中存储了所有进程的公共数据,例如锁变量、进程通信状态、共享缓冲区中的页面块等。

  • 本地内存

    为每个后台进程所专有,是他们的工作区域,存储着属于该进程的Cache(高速缓存)、事务管理信息、进程信息等

  • 内存上下文

    内存上下文(MemoryContext)用于统一管理内存分配和回收。

  • 缓冲区

    磁盘中的文件块读入内存,被存放在缓冲区中, 称之为页面块或缓冲块。一个标准缓冲块大小为8K。PG设立了共享缓冲池(SharedBufferPool)和本地缓冲池

共享内存机制

  1. 轻量级锁机制:用于防止多个进程并发访问共享内存中的数据发生冲突。
  2. 进程间通信(IPC)机制:在进程之间进行通信和消息传递,使用消息队列同步进程之间的无效信息,还提供了对共享内存的管理。
  3. 共享缓冲池(shared buffer)机制:存储在进程之间共享的页面块。

本地内存机制

  1. 本地缓冲池机制:存储进程私有的页面块
  2. Cache机制:将进程最近使用的一些系统数据缓存在其私有内存中,级别高于缓冲池

外存管理

包括表文件管理、可见空间(VM)管理、空闲空间(FSM)管理、虚拟文件描述符(VFD)管理以及大数据存储管理等

  • 表文件管理

    PostgreSQL中每个表都用一个文件(表文件)存储,并以OID命名。文件大小超出限制,自动拆分并在文件名尾部加上顺序号以标识。

  • 可见空间(VM)管理和空闲空间(FSM)管理

  • 虚拟文件描述符(VFD)管理

  • 大数据存储管理

在PostgreSQL中,每个数据库有一个数据库id。以数据库id创建目录,目录下存放对应的表。每个表都用一个文件存储,表文件以表的OID命名。
对于大小超出1G的表数据文件,PG会自动将其切分为多个文件来存储,切分出的文件用OID.<顺序号>来命名。

后缀为_fsm和_vm这两个表文件的附属文件是空间空闲映射表文件和可见性映射表文件。
每个表文件由多个BLCKSZ字节大小的page组成,文件的写入是以page为最小单位。
在PostgreSQL中,每个page缺省大小为8K,可以在编译PostgreSQL时指定BLCKSZ的大小,对于IO性能较好的硬件,增加BLCKSZ的大小可以显著提升数据库性能。
每个page又可以包含多个tuple(在PG中将保存在磁盘中的块称为page,而将内存中的块称为buffer,行称为tuple,这些都是与数学概念相同的)。

在PostgreSQL中,表文件中的tuple之间不进行关联,这样的表文件称为堆文件,每个堆文件都是由多个page组成。

reference

1.https://www.jianshu.com/p/1ab0ed41caa2

在 PostgreSQL 中如何实现数据的缓存策略? 在 PostgreSQL 中,实现数据的缓存策略主要可以通过 PostgreSQL 自身的缓存机制以及应用层面的优化来进行。以下将详细介绍相关内容,并提供示例和解释以帮助您更好地理解。 阅读详情

相关推荐

postgreSQL中的高速缓存

​如下图所示,当一个postgreSQL进程读取一个元组时,需要获取表的基本信息(例如:表的oid、索引信息和统计信息等)及元组的模式信息,这些信息被分别记录在多个系统表中。通常一个表的模式信息在设定好后的变化频率很低,因此在对同一个表的多个元组操作时,每次都去读取系统表的元组来构建模式信息显然是没有必要的,这也会降低元组的操作效率。为了减少对系统表的访问,在每个进程的本地内存区。

zhaopengvv的博客 1244

PostgreSQL数据库缓存配置

PostgreSQL数据库缓存配置

abc_xian的博客 4374

01PG缓存-缓存结构

缓存池规则的排列一个一个的数据页缓存——buffer(在Oracle中数据页在磁盘上称为block,在内存中称为buffer,这里也将缓存在内存中的固定大小的数据称为buffer),查看缓存池中buffer的数量可以通过 pg_buffercache扩展模块查看。不同的数据库、不同的模块使用的HASH算法不同,但是原理大体一致,最简单的HASH算法是求余,输入一个值:50,以“除以33取余”,得到17。要注意的是,缓存描述符组成的链表,称为freelist,但是和Oracle中的freelist不一样的。

qq_29431123的博客 1134

PostgreSQL数据库缓冲区管理器——本地缓冲区管理

本地缓冲区管理器(local buffer manager)为temporary表(无需WAL-logged或checkpointed)进行快速缓冲区管理,API定义在src/backend/storage/buffer/localbuf.c中。

肥叔菌的博客 1300

PostgreSQL-缓存利器

作者:徐田原 引言 当发起“select * from XXX”时,数据会加载到操作系统缓存然后才到shared buffer。PostgreSQL缓存读顺序share_buffers -> 操作系统缓存 -> 硬盘。同样当将脏页向磁盘刷写时,也是先到操作系统缓存,然后由操作系统调用fsync()将操作系统缓存中数据持久化到磁盘。这样PG实际上由两份数据,看起来有些浪费空间,但是操作系统缓存是一个简单的LRU而不是数据库优化的clock sweep algorithm。一旦在shared_buf

PostgreSQL China 2510

Plant Simulation新手入门:从零开始搭建工厂布局仿真模型(附完整代码)

本文为Plant Simulation新手提供了一个从零开始搭建工厂布局仿真模型的完整实战教程。通过一个玩具工厂车间布局优化的具体案例,详细讲解了从数据准备、模型构建、核心逻辑编程到连接遗传算法进行自动优化的全流程,并附有完整代码示例,帮助读者快速掌握这一工业仿真软件的核心应用。

metal的博客 554

PostgreSQL record的使用 存储过程保存一行数据的变量

以下示例用到的测试表 drop table if exists test; create table test ( id bigserial primary key, name varchar(20), age int ); delete from test; insert into test(name, age) values ('张三', 1), ('李四', 2), ('王五', 3), ('李四', 4), ('王五', 5); 1、结合游标使用,减少变量声明,用于接收

灰的博客 5492

全球尺度遥感云计算平台:Google Earth Engine

Google Earth Engine(GEE)是一个基于 Google 云服务基础设施的遥感大数据分析平台,它结合 Google 强大的云计算能力与 NASA、ESA、NOAA 等机构的空间数据,用于在全球尺度解决一些非常重要的社会问题:森林退化、粮食安全、灾害预警、水资源管理、气候监测以及环境保护等。 GEE 官方宣传视频(版权归 Google 所有) Spacefan 的视频 ·303播放 发展背景 2008 年,手握 40 多年 LandSat 数据的美国地质调查局(USG...

qq_41240287的博客 5015

Record和PL/SQL详解及操作实战

 1.     Record和PL/SQL操作a.        概念一,什么是记录Record和PL/SQL表?  记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。 PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对象类型。类似于一维数组和键值对。  都是用户自定义数据类型。二,Record

Patrick 835

读书笔记:深度学习入门-基于python的理论与实现(俗称鱼书)

终于从头到尾把鱼书看完啦,真的是非常入门,非常查漏补缺,对新手很友好,对有一定基础的人也非常不错。看完不复习等于没看,所以今天开始复盘,顺便写这篇读书笔记。希望分享给没看过这本书或者看过这本书的同僚们参考,欢迎大家指教。我将从第三章神经网络开始复习,前两章内容书里已经非常基础and清楚了。(会持续更新滴).........

博客而已 1万+

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2335

postgresql存储过程_多行多列_单表或结构相同表

前面的单行单列和多行单列,返回值都只有一个类型,那多行多列如何定义返回值呢? 使用RECORD record实际上相当于一个占位符或者说指针。 也就是说,系统看到record不会反应过来要去查系统表。 CREATE OR REPLACE FUNCTION am2m1 ( in_id integer) RETURNS SETOF RECORD as $$ DECLARE v_rec RECORD; BEGIN for v_rec in ( (select id,d_code,d_name,d

weixin_43993065的博客 1386

随机优化 (Stochastic Optimization) 算法详解及案例分析

随机优化是一种用于处理包含随机变量的优化问题的方法。其目标是通过考虑随机变量的概率分布,找到一个在期望意义下最优的解。

闲人编程的博客 4184

PostgreSQL缓存管理

主要介绍了postgresql的buffer结构和访问步骤

weixin_47895938的博客 1593

PyTorch生成式人工智能(3)——使用PyTorch构建神经网络

在本节中,我们使用 PyTorch 在简单数据集上构建了一个神经网络,训练神经网络来映射输入和输出,并通过执行反向传播来更新权重值以最小化损失值,并利用 Sequential 类简化网络构建过程;介绍了获取网络中间值的常用方法,以及如何使用 save、load 方法保存和加载模型,以避免再次训练模型。

盼小辉丶的博客 1万+

基于HTML5的酒店在线预订系统设计与实现

1.背景介绍 酒店预订系统,作为现代酒店业务中的重要一环,其便捷性、智能化程度直接影响着酒店的服务质量和经营效果。近年来,随着互联网技术和移动设备的快速发展,以及消费者行为的日益电子化,酒店预订系统也正在经历一场深刻的变革。传统的酒店预订系统往往依赖于复杂的软件安装和硬件设备,而新一代的酒店预订系统则更加强调在线、移动和云端的特性。HTML5作为一种前

AI天才研究院 1909

PostgreSQL 之 FSM和VM的理解

表或索引对象被创建后,可以通过relfilenode定位到表对象的存放位置,进入对象所在路径,你会发现有后缀为“_fsm”或“_vm”命名的文件,对fsm 和 vml理解如下: 空闲空间映射(FSM) 每一个表和索引(除了哈希索引)都有一个空闲空间映射(FSM)来保持对关系中可用空间的跟踪; 它伴随着主关系数据被存储在一个独立的关系分支中,以关系的文件节点号加上一个_fsm后缀命名; 例如...

HighGO 4870

【1】Java 部分笔试题解析

解析A.abstract关键字应该放在class关键字之前。C.抽象方法不能有方法体。D缺少了class关键字。

博客 3945

Postgres中FSM及VM文件说明

PostgreSQL使用一个名为FSM的文件记录每个数据块的空闲空间。FSM的英文是Free Space Map FSM文件并不是在闯进表文件时就立马创建的,而是等到需要时才会创建,也就是执行VACUUM操作时,或者是为了插入行而第一次查询FSM文件时才创建。 PG中更新、删除某行后,该行并不会马上从数据块中清除掉,而是需要等执行VACUUM命令时再清理。 为了能加快VACUUM清理

lk的窝 4476

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

postgresql数据库优化

默认情况下track_io_timing参数是关闭的,所以“读数据块的总时间”和“写数据块的总时间”这两项没有数据。这里需要重点关注swap大类中的si和so,如果这两项中有大于0的数值,说明发生了SWAP交换,系统的内存不足了。各CPU共享相同的物理内存,访问内存任何地址所需的时间相同,因此程序设计较为简单。·优点:多CPU模块,每个CPU模块具有独立的本地内存(快),但访问其他CPU内存(慢),硬件实现成本低。·缺点:因多CPU无主次关系,需要解决内存访问冲突,所以硬件实现成本高。·缺点:数据重分布;

weixin_73350116的博客 2206

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【数据库】为什么PostgreSQL第一次查询结果很慢,第二次就变快了

例如,当数据库中的数据发生变化时,查询缓存中的结果可能已经过时,这时候再次执行相同的查询,仍然会从数据库中获取最新的数据,导致查询速度变慢。例如,当数据库中的数据发生变化时,查询缓存中的结果可能已经过时,这时候再次执行相同的查询,仍然会从数据库中获取最新的数据,导致查询速度变慢。在PostgreSQL数据库中,我们经常会遇到这样的情况:第一次执行某个查询语句时,结果返回的速度非常慢,而当我们再次执行相同的查询语句时,速度却变得非常快。PostgreSQL为了提高查询性能,采用了一种名为“查询缓存”的技术。

木头大左的博客 1726

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【PostgreSQL】【存储管理】表和元组的组织方式

外存管理负责处理数据库与外存介质(PostgreSQL8.4.1版本中只支持磁盘的管理操作)的交互过程。在PostgreSQL中,外存管理由SMGR(主要代码在smgr.c中)提供了对外存的统一接口。SMGR负责统管各种介质管理器,会根据上层的请求选择一个具体的介质管理器进行操作。每个表在磁盘中都以一定的结构进行存储,针对磁盘,外存管理模块提供了磁盘管理器和VFD机制。在PostgreSQL8.4.1版本中,还为每个表文件创建了两个附属文件,即空闲空间映射表(FSM)和可见性文件映射表(VM)。

guye 868

【PGCCC】Postgresql 缓存池原理

postgresql 为了提高响应速度,在存储层上面添加了一层缓存,这样对于数据的查询和修改,都会先在缓存中操作,后面才会同步到磁盘。这样对于一些热点数据,性能提高非常明显。缓存的基本单位对应文件的一个 block,本篇主要介绍缓存池的原理和使用。

PGCCC的博客 1508

【无标题】

日常笔记

weixin_45092495的博客 482

别再堆中间件了!我用PostgreSQL干掉了Redis、RabbitMQ和Elasticsearch,架构反而更稳了

本文介绍了一种简化中小规模项目架构的创新方案:利用PostgreSQL替代Redis、RabbitMQ和Elasticsearch等中间件。文章指出,传统架构中过度堆砌中间件会导致高成本、复杂运维和低效开发等问题。作者详细展示了PostgreSQL作为"六边形战士"的多功能特性,包括通过物化视图实现缓存、利用SKIP LOCKED实现队列、内置全文搜索等功能。文章提供了完整的Rust+PostgreSQL开发环境搭建指南,并给出具体代码实现,如使用物化视图替代Redis缓存。这种一体化架构方案特别适合日活5

IT枫斗者的博客 729

Postgresql源码(75)notify与listen执行流程分析

两句话总结: - notify将msg追加到slru消息队列,发信号通知。 - listen注册监听人backend到监听队列,每个监听者消费,并自己记录消费位置。

InternalsOf 1320
上一篇: 数据库修仙炼气篇十——repmgr
下一篇: 数据库修仙炼气篇三——postgresql进程之BgWriter
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值