一、进程和内存架构图

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. uwsgi_read_timeout超时处理

    最近发现一服务器一个奇怪的现象: Django的视图函数在浏览器一个请求的情况下,竟然做了两个请求的函数处理.不可思议,找了几天也不知道为什么, 只发现只要用uwsgi_read_timeout之后, ...

  2. php获取跳转后的真实链接

    网站的跳转链接经常为本站链接加上一些参数来跳转,如何使用php获取跳转后的链接呢? php代码如下: <?php // echo get_redirect_url('http://www.osc ...

  3. POJ1446 Girls and Boys

    Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 12747   Accepted: 5678 D ...

  4. C语言注意点汇总

    计算机的一切源头都是0和1,其中0:断电,1:有电. 计算机语言发展史:机器语言--汇编语言--高级语言.机器语言0.1直接对硬件起作用.汇编语言,给机器语言添加了一些符号,使其更易于让人理解.记忆. ...

  5. iOS中的序列帧动画

    UIImageView对象的有一个animationImages属性,将图片数组赋值给该属性即可.如图: 控制动画的播放方法是:[ ___  startAnimating]; 控制动画的停止方法是:[ ...

  6. UITabBarItem title 和self.title设置不同的标题

    self.navigationItem.title = @"my title"; //sets navigation bar title. self.tabBarItem.titl ...

  7. Java学习--基本数据类型的定义和运算

    例1: public class DataDemo05{ public static void main(String args[]){ char ch1 = '\"' ; // 表示的是一 ...

  8. map 小模板~~~ 写的不好 继续添加

    #include<map>#include<string.h>#include<iostream>using namespace std; int main(){  ...

  9. Python 学习第二章

    本章内容 数据类型 数据运算 表达式 if ...else 语句 表达式 for 循环 表达式 while 循环 一.数据类型 在内存中存储的数据可以有多种类型. 在 Python 有五个标准的数据类 ...

  10. bootstrap基础学习小记(一)简介模板、全局样式

    2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...