PostgreSQL 随读笔记

PostgreSQL 随读笔记

1. 代码结构

略(主要是调用关系)

  • Bootsrap:
  • Main:程序主模块,负责将控制权转到 Postmaster/Postgres 进程
  • Libpq:C/C++的库函数,主要是用来处理客户端的通信
  • Tcop:Postgres进程的主要处理部分,调用parser,optimizer,executor等来执行客户端提交的查询

2. 体系结构

2.1 系统表

记录数据存放结构原信息的地方,分为普通表和视图,由于访问非常频繁,建立了cache提高查询效率。

位置:src/include/catalog

2.1.1 主要系统表

  • pg_namespace:名字空间,比如临时表的名字空间,系统表的名字空间,某个用户的名字空间,这样用户之间可以建立相同名字的表,其oid存储在元组的隐藏属性中;
  • pg_tablespace:表空间,放置不同的表空间有助于实施磁盘文件布局,一个数据集簇的所有数据库共享pg_tablespace表,DBA可以根据表空间将数据分布在不同磁盘分区上,如果该磁盘分区用完了可以利用表空间去使用另一个分区的空间。同样存储在元组的隐藏属性中;
  • pg_database:略
  • pg_class:略
  • pg_type:略
  • pg_attribute:略
  • pg_index:略

系统表之间有依赖关系。

2.1.2 系统视图

主要访问数据库内部状态

2.2 数据集簇

initdb的时候初始化磁盘上的数据存储区,就是数据集簇。就是一些文件的集合。用到PGDATA。

2.3 PostgreSQL进程结构

两个进程,一个是postmaster,一个是postgres
postmaster负责整个系统的驱动和关闭,接收客户端的连接请求,为其分配服务进程postgres
postmaster启动的进程都是系统级的,例如BgWriter等。

2.4 守护进程postmaster

位置:src/backend/postmaster
做了一些操作:

  • 初始化内存上下文:TopMemoryContext(整个系统退出时才会释放)和ErrorContext(错误恢复处理的永久性内存环境),TopMemoryContext下面创造PostmasterContext(postmaster正常工作的环境)
  • 配置参数
  • 创建监听套接字
  • 注册信号处理函数
    信号是操作系统响应某些错误状况而产生的事件,可以明确的由一个进程发给另一个进程。
    进程是有权选择响应或者屏蔽信号的(除了sigkill和sigstop不能屏蔽)
  • 辅助进程启动
    装载客户端认证文件pg_hba.conf和pg_ident.conf两个配置文件的内容到链表变量中
  • 循环等待客户连接请求

2.5 辅助进程

暂时略

2.6 服务进程Postgres

位置:src/backend/tcop
多用户postgres进程通过postmaster动态的创造,单用户postgres自己负责完成初始化等操作

src/backend/tcop下:

  • postgres.c是入口文件,负责管理查询的整体流程(PostgresMain函数)
  • 对查询命令进行处理:pquery.c
  • 非查询命令的处理文件: utility.c
  • dest.c 处理postgres和远程客户端的一些消息通信操作

进程入口位于PostgreSQLMain函数中:
在这里插入图片描述
初始化之后,循环等待处理查询,一般的操作语言命令作为简单查询来处理的:exec_simple_query

你可能感兴趣的:(数据库)