PostgreSQL的核心架构

PostgreSQL的核心架构

注意 本人的博客都迁移到本人自己搭建的博客地址,通过此处可查看。

应用程序的访问接口

1. 访问接口总体图

访问接口总体图

进程及内存结构

1. 进程和内存结构图

进程和内存结构图

  • 主进程:Postmaster进程

  • 辅助进程:SysLogger(系统日志)进程、BgWriter(后台写)进程、WALWrite(预写式日志)进程、PgArch(归档)进程、AutoVacuum(系统自动清理)进程、PgStat(统计收集)进程、CheckPoint()进程。

2. 主进程 Postmaster

是整个数据库实例的总控进程,负责启动和关闭该数据库实例。

3. Syslogger(系统日志)进程

需要在Postgres.conflogging_collection设置为on,此时主进程才会启动Syslogger辅助进程。

4. BgWriter(后台)进程

把共享内存中的脏页写到磁盘上的进程。主要是为了提高插入、更新和删除数据的性能。

5. WalWrite(预写式日志)进程

WAL:Write Ahead Log(预写式日志)

在修改数据之前把修改操作记录到磁盘中,以便后面更新实时数据时就不需要数据持久化到文件中。

6. PgArch(归档)进程

WAL日志会被循环使用,PgArch在归档前会把WAL日志备份出来。通过PITY(Point in Time Recovery)技术,可以对数据库进行一次全量备份后,该技术将备份时间点之后的WAL日志通过归档进行备份,使用数据库的全量备份再加上后面产生的WAL日志,即可把数据库向前推到全量备份后的任意一个时间点。

7. AutoVacuum(自动清理)进程

在PostgreSQL数据库中,对表进行DELETE操作后,旧的数据并不会立即被删除,并且,在更新数据时,也并不会在旧的数据上做更新,而是新生成一行数据。旧的数据只是被标识为删除状态,只有在没有并发的其他事务读到这些就数据时,它们才会被清楚。这个清除工作就有AutoVacuum进程完成。

8. PgStat(统计数据收集)进程

做数据的统计收集工作。主要用于查询优化时的代价估算,包括一个表和索引进行了多少次的插入、更新、删除操作,磁盘块读写的次数、行的读次数。pg_statistic中存储了PgStat收集的各类信息。

9. 共享内存

PostgreSQL启动后,会生成一块共享内存,用于做数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和Clog缓冲区也存在共享内存中,除此之外还有全局信息比如进程、锁、全局统计等信息也保存在共享内存中。

使用"mmap()“方式的共享内存,使用此内存的好处是不在需要配置"System V"共享内存的参数"kernel.shmmax"和"kernel.shmall”,就能使用较大的共享内存。

10. 本地内存

非全局存储的数据都存在本地内存中,主要包括:

  • 临时缓冲区:用于访问临时表的缓冲区

  • work_mem: 内部排序操作和Hash表在使用临时操作文件之前使用的存储缓冲区。

  • manintance_work_mem: 在维护操作比如:VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN Key等中使用的内存缓冲区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUG: Setup Was Unable to Create a DCOM User Account Error Message in Visual Studio 6.0

今天在安装VS 6.0时&#xff0c;遇见这个问题&#xff1a;Setup was unable to create a DCOM user account in order to register <path>&#xff3c;valec.exe后来找到原来是VS的一个Bug。贴出微软的原文&#xff1a;BUG: "Setup Was Unable to Create a DCOM Use…

研究下

渗透测试: http://www.cnblogs.com/hyddd/archive/2009/03/22/1419104.html ldap: http://waringid.blog.51cto.com/65148/79648/

线程属性 pthread_attr_t

参考资料&#xff1a; https://blog.csdn.net/hudashi/article/details/7709413 Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中&#xff0c;把第二个参数设置为NULL的话&#xff0c;将采用默认的属性配置…

如何让new操作符只构造,不申请内存

问题 c中的new操作符 通常完成两个工作 分配内存及调用相应的构造函数。 请问&#xff1a; 如何让new操作符不分配内存&#xff0c;只调用构造函数&#xff1f; 这样的用法有什么用&#xff1f; placement new的含义 placement new可以实现不分配内存&#xff0c;只调用…

Linux 下的多线程下载工具

2019独角兽企业重金招聘Python工程师标准>>> 最先用的是 Axel&#xff08;http://axel.alioth.debian.org/&#xff09;&#xff0c;功能还可以&#xff0c;不过下载文件最多支持到 2GB&#xff0c;再大的文件就不能下载了&#xff0c;真变态&#xff01; aget&…

Launcher结构之home screen

今天刚刚知道如果你的Eclipse里面的工程指向服务器里面的源码记住千万不能在Eclipse里编译~~会在服务器上的源码里多处很多的中间件这样make不了只能清除那些中间件才能编译比较麻烦 Home screen可以说是一个手机的最重要应用&#xff0c;就像一个门户网站的首页&#xff0c;直…

Python_迭代器和生成器的复习_38

迭代器和生成器 迭代器&#xff1a; 双下方法&#xff1a;很少直接调用的方法&#xff0c;一般情况下&#xff0c;是通过其他方法触发的 可迭代的协议——可迭代协议 含有__iter__ 的方法 (__iter__ in dir(数据)) 可迭代的一定可以被for循环 迭代器协议&#xff1a;含有 __ite…

Elasticsearch是如何做到快速索引的

最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作&#xff0c;花了些时间学习Elasticsearch的基础理论知识&#xff0c;整理了一下&#xff0c;希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确…

第13届年度Webby奖采用Silverlight / 13th Annual Webby Awards powered by Silverlight

13th Annual Webby Awards powered by Silverlight 第13届年度Webby奖采用Silverlight 原文连接&#xff1a;http://team.silverlight.net/case-study/13th-annual-webby-awards-powered-by-silverlight/ 原文分类&#xff1a;Case Study&#xff08;案例学习&#xff09; 原文…

纯C日志函数库 zlog

zlog - 纯C日志函数库 - 开源中国纯C日志函数库 zlog分享到 新浪微博腾讯微博已用 10收藏92参加 OSC 应用开发大赛&#xff0c;拿 Nexus 4 手机 星星之火&#xff0c;可以燎原zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。事实上&#xff0c;在C的世界里面没…

[十二省联考2019]字符串问题 后缀自动机 + 拓扑排序 + 最长路 + 倍增

题目描述&#xff1a;给定一个长串 $S$&#xff0c;给定若干 $S$ 的子串 $a_{i}$, $b_{i}$&#xff0c;再给出一些 $a$ 串和 $b$ 串的支配关系. 构造一个长度最长的字符串&#xff0c;使得&#xff1a;字符串只由 $a_{i}$ 组成.当且仅当 $a_{i}$ 所支配的一个串 $b_{i}$ 为 $a_…

分布式事务2PC、3PC模型

工作中使用最多的是本地事务&#xff0c;但是在对单一项目拆分为 SOA、微服务之后&#xff0c;就会牵扯出分布式事务场景 文章以分布式事务为主线展开说明&#xff0c;并且针对 2PC、3PC 算法进行详细的讲解&#xff0c;最后通过一个 Demo 来更深入掌握分布式事务&#xff0c;…

c# datatable用法总结

在项目中经常用到DataTable,如果DataTable使用得当&#xff0c;不仅能使程序简洁实用&#xff0c;而且能够提高性能&#xff0c;达到事半功倍的效果&#xff0c;现对DataTable的使用技巧进行一下总结。 一、DataTable简介 (1)构造函数 DataTable() 不带参数初始化DataT…

Python学习之路——装饰器

开放封闭原则&#xff1a;不改变调用方式与源代码上增加功能 1.不能修改被装饰对象(函数)的源代码&#xff08;封闭&#xff09; 2.不能更改被修饰对象(函数)的调用方式&#xff0c;且能达到增加功能的效果&#xff08;开放&#xff09;View Code装饰器 # 把要被装饰的函数作为…

通断时间面积法

背景&#xff1a; 来 源&#xff1a; 通断时间面积法是入选《供热计量技术规程》JGJ173-2009的一种热量分摊计量方法实现分户计量的一种计量方法。由清华大学建筑节能研究中心江亿院士提出。 简 称 ( 俗称 )&#xff1a;&#xff08;1&#xff09;“时温法”&#xff08;2&a…

C++ std::move()和完美转发

std::move()、std::forward<T>、模板类型推断分析 引用折叠原则和完美转发是有联系的&#xff0c;可以说后者是基于前者的某些特性实现的&#xff0c;具体来看一下。 要理解完美转发&#xff0c;需要了解两个知识点&#xff1a; 引用折叠原则&#xff08;Reference colla…

线面要素类相互转换-原创

一、线转面的步骤 1、线几何属性转面几何属性ArcToolbox-Data Management Tools-Features-Feature To polygon&#xff0c;此过程只是将几何属性做了转换&#xff0c;得到的是属性信息丢失了的面t_L_HDBX_FeatureToPolygon1 2、 在ArcMap中将t_L_HDBX_FeatureToPolygon1全选&a…

SEO网站标题怎么优化

经过前两天发的两篇原创文章被加精之后&#xff0c;我的热情是一发不可收拾&#xff0c;忍不住又想写点干货给大家分享&#xff01;今天分析一下网站标题如何设置之SEO技巧。通过标题就可以看出&#xff0c;今天是讲网站标题如何设置&#xff0c;为什么要写这个呢&#xff1f;因…

Redis淘汰删除策略

Redis淘汰删除策略Redis淘汰删除策略6种淘汰Key策略3种删除过期键策略定时删除惰性删除定期删除其他模块的淘汰处理RDB 快照持久化创建载入AOF 只追加持久化写入重写主从复模式下对过期键的处理6种淘汰Key策略Redis中通过maxmemory参数来设定内存的使用上限&#xff0c;当Redis…

MySQL NDB Cluster

1. MySQL Cluster 是一种技术&#xff0c;该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构&#xff0c;系统能够使用廉价的硬件&#xff0c;而且对软硬件无特殊要求。此外&#xff0c;由于每个组件有自己的内存和磁盘&#xff0c;不存在单点故…