• postgresql进程及内存结


    一、进程和内存架构图

    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 日志的目录。

            

  • 相关阅读:
    mysql报Fatal error encountered during command execution的解决办法
    C语言之算法初步(汉诺塔--递归算法)
    C语言中变量的作用域和生命周期
    C语言数据在内存分配
    ~~~
    数据结构笔记
    SQL笔记
    Java零碎知识点
    如何让eclipse在程序修改后,点击运行可以自动保存。
    [转载] java中静态代码块的用法 static用法详解
  • 原文地址:https://www.cnblogs.com/sunshine-long/p/9053446.html
Copyright © 2020-2023  润新知