一、进程和内存架构图

postgresql数据库启动时,先启动一个postmaster的主进程,然后fork出一些辅助子进程。

二、主进程postmaster

-bash-4.2$ which postgres
/usr/pgsql-9.6/bin/postgres

  主进程postmaster 是整个数据库实例的总控进程,负责启动和关闭该数据库实例。用户运行postmaster、postgres命令并加上合适的参数启动数据库。实际上,postmaster命令是一个指向postgres的链接

-bash-4.2$ ls -l postmaster
lrwxrwxrwx 1 root root 8 May 16 08:29 postmaster -> postgres

  

三、syslogger(系统日志)进程

配置文件postgresql.conf中有logging_collect 为 on 时,主进程才会启动syslogger。

四、BgWriter(后台写)进程

负责吧共享内存中的葬爷写到磁盘上的进程。当往数据库中插入或者更新数据时,并不会马上把数据持久化到数据文件中。 ‘bgwriter_’开头的配置控制。

五、walwriter(预写日志写)进程  write ahead log,wal log  又简称xlog。

预写日志的概念就是在修改数据之前,必须要把这些修改操作记录到磁盘中,这样后面更新实际数据时,就不需要实时的把数据持久化到文件中了。

WAL日志保存在pg_xlog下。每个xlog文件默认16M,宕机情况下,未持久化的数据会通过WAL日志恢复。

六、PaArch(归档)进程

WAL日志会循环使用,也就是说,较早时间的WAL日志会被覆盖。PgArch归档进程会在覆盖之前把WAL日志备份出来。

七、AutoVacuum(自动清理)进程

对表进行delete操作后,旧的数据并不会立即被删除,旧的数据只是被标识为删除状态,只有在没有并发的其它事务读到这些旧数据时,他们才会被清楚掉。这个工作就是autovacuum完成。

八、pgstat(统计数据收集)进程

九、共享内存

postgresql启动后,会生成一块共享内存,共享内存主要用作数据块的缓冲区,以便提高读写性能。wal日志缓冲区和CLOG缓冲区也存在于共享内存中。

十、本地内存

临时缓冲区:用于访问临时表的本地缓冲区。

目录结构

一、通常安装在/usr/local目录下。

二、数据目录的结构。

一般使用环境变量PGDATA指向数据目录的根目录。这个目录在安装时指定的,所以在安装时需要指定一个合适的数据目录的根目录,每个数据实例都需要这么一个目录。

目录初始化用initdb完成的,会生成三个配置文件。

postgresql.conf: 数据库实例的主配置文件。

pg_hba.conf: 认证配置文件,允许哪些IP的主机访问,认证方法等。

pg_ident.conf:  'ident'  认证方式的用户映射文件。

子目录:base 默认表空间的目录

    global:一些共享系统表的目录。

    pg_clog:commit log的目录

    pg_log:系统日志目录,查看系统错误时可查看此目录的日志文件。

    pg_stat_tmp:统计信息的存储目录。

    pg_twophase:使用两阶段提交功能时分布式事务的存储目录。

    pg_xlog: WAL 日志的目录。

      

postgresql进程及内存结的更多相关文章

  1. Postgresql 进程和内存结构

    在本章中,总结了PostgreSQL中的流程体系结构和内存体系结构,以帮助阅读后续章节.如果您已经熟悉它们,可以跳过本章 1.进程结构 Postgresql 是一个C/S架构的关系型数据库,由多个后台 ...

  2. PostgreSQL进程和内存结构

    PostgreSQL数据库启动时,会先启动一个叫做Postmaster的主进程,还会fork一些辅助子进程,这些辅助子进程各自负责一部分功能,辅助子进程分类如下: $ ps -ef | grep po ...

  3. linux下对进程按照内存使用情况进行排序

    linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...

  4. HBase 学习笔记---守护进程及内存调优

    1.HMaster           HMaster的任务前面已经说过了,两个大方向:一.管理Hbase Table的 DDL操作 二.region的分配工作,任务不是很艰巨,但是如果采用默认自动s ...

  5. 进程与线程(二) java进程的内存模型

    从我出生那天起,我就知道我有个兄弟,他桀骜不驯,但实力强悍 ,人家都叫它C+++            ----java 上回说到了,C进程的内存分配,那么一个java运行过程也是一个进程,java内 ...

  6. .NET(C#):获取进程的内存私有工作集

    当前.NET Framework(.NET 4.0)的Process仅提供进程的内存工作集的获取(通过WorkingSet64属性),而没有提供对私有工作集的获取.注意在Windows Vista之后 ...

  7. 通过WriteProcessMemory改写进程的内存

    http://www.cnblogs.com/feiyucq/archive/2009/10/21/1587628.html 以PROCESS_ALL_ACCESS权限打开进程以后既能够使用ReadP ...

  8. Windows中进程的内存结构

    基础知识: 栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表.允许插入或删除操作的一端称为栈顶,另一端称为栈底,对栈的插入和删除操作被称为入栈和出栈. 有一组CPU指令可以实现对进程 ...

  9. Android进程的内存管理分析

    尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...

随机推荐

  1. (转)什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

    转自:http://www.cnblogs.com/haofaner/articles/2288968.html 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服务 ...

  2. _编程语言_C++_简介

    扩展名: .cpp..cp或.c C++编译器: GNU的gcc 编译器

  3. 你可能不知道的Shell

    Shell也叫做命令行界面,它是*nix操作系统下用户和计算机的交互界面.Shell这个词是指操作系统中提供访问内核服务的程序. 这篇文章向大家介绍Shell一些非广为人知.但却实用有趣的知识,权当品 ...

  4. Android-WebView与本地HTML(播放视频)

    assets资源目录里面的文件介绍: RealNetJSCallJavaActivity_files文件夹

  5. MySQL--REPALCE INTO操作

    REPLACE INTO语法是MySQL数据库独特的扩展语法,可以提供“不存在即插入,存在即更新”的操作,MySQL官方文档解析其算法为: 1.尝试进行INSER 操作 2.如果INSERT 失败,则 ...

  6. 【文文殿下】[CEOI2004]锯木厂选址 题解

    题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...

  7. Python 常用的内置函数

    1. str.isdigit( ) 作用:检测字符串是否有数字组成 2. strip( ) 作用:除去首尾指定的字符,包括空格,换行符,不能除去中间的字符 3. slice( ) 作用:以指定参数切割 ...

  8. 利用adb 打开手机应用程序

    通过adb打开android应用,我们需要做的第一步,就是查看当前app的入口,第二部,就是通过命令启动我们的app入口 查看app的启动画面 在运行下面命令时,先启动想要通过adb打开的app #查 ...

  9. 全世界最顶级黑客同时沸腾在DEF CON 25,是怎样一种体验?

    2017,我在这里!圆你黑客梦!!   被称为黑客“世界杯”与“奥斯卡”的美国黑帽技术大会Black Hat和世界黑客大会DEF CON 是众多黑客心中最神圣的梦!   有位小表弟告诉我说:Black ...

  10. mongodb批量更新某个字段

    查询出hospitalName是xx医院和openId以2开头的所有记录,并且更新my_booking表中的payType为1. db.getCollection('my_booking').find ...