事务系统: 由事务管理器, 日志管理器, 并发控制, 锁管理器组成,
日志管理器和事务管理器完成对操作请求处理的事务一致性支持,
锁管理器和并发控制提供对并发访问数据的一致性支持;
系统表: 是PG数据库的元信息管理中心, 包括数据库对象信息和数据库管理控制信息,
系统表管理元数据信息, 将PG数据库的各个模块有机连接在一起,
形成一个高效的数据管理系统.
在PG数据库系统中, 系统表扮演着数据库字典的角色.
在关系数据库中, 为了实现数据库的控制, 必须提供数据库字典的功能.
数据字典不仅存储各种对象的描述信息, 而且存储系统管理所需的各种对象的细节信息.
从内容来看, 数据字典包含数据库系统中所有对象及其属性的描述信息,
对象之间关系的描述信息,
对象属性的自然语言含义以及数据字典变化的历史(即数据库的状态信息).
数据字典是关系数据库系统管理控制信息的核心, 在PG中,
系统表扮演中数据库字典的角色.
在关系数据库中,为了实现数据库系统的控制,必须提供数据字典的功能.数据字典不仅存储各种对象的描述信息,而且存储系统管理所需的各种对象的细节信息.从内容来看,数据字典包含数据库系统中所有对象及其属性的描述信息,对象之间关系的描述信息,对象属性的自然语言含义以及数据字典变化的历史(即数据库的状态信息).
数据字典是关系数据库系统管理控制信息的核心,在PG数据库系统中,系统表扮演着数据字典的角色.
PG的某一个数据库中都有自己的一套系统表,其中大多数系统表都是在数据库创建时从模板数据库中拷贝过来的,因此这些系统表里的数据都是与所属数据库相关的.只有少数系统表是所有数据库共享的(比如pg_database),
这些系统表里的数据时关于所有数据库的.
Postgremaster进程在起始时会建立共享内存和信号库,
Postgremaster及其子进程的通信就是通过共享内存和信号来实现的.
这种多进程设计使得整个系统的稳定性更好,
即使某个后台进程奔溃也不影响系统中其他进程的工作,
Postgremaster只需要重置共享内存即可从单个后台进程的奔溃中恢复.
PG7.1之前的版本在处理大量以指针传值的查询时一直存在着内存泄漏问题,
直到查询结束后才能将内存收回.
为了解决这个问题, 从版本7.1开始, 系统实现了新的内存管理机制,
这样使得运行时大多数内存分配操作在各个语义的内存上下文(MemoryContext)中进行.
内存上下文释放时将会释放在其中分配的所有内存,
这样即使某些内存没有被任何指针指向或忘记了释放,
我们也可以通过释放内存上下文来避免这些内存泄漏.
这一机制也使得内存管理更加方便, 开发人员不必再费尽心思的处理内存释放的工作.
内存上下文具体是如何使用的
程序首先调用MemoryContextInit创建TopMemoryContext和ErrorContext.
然后调用AllocSetContextCreate以TopMemoryContext为根节点创建PostmasterContext
最后, 将全局指针CurrentMemoryContext指向PostmasterContext.
这些内存上下文的具体含义如下:
TopMemoryContext: 在其中分配的内存直到系统退出时才会释放. 例如:
其中存放了所有打开的文件描述符, 内存上下文的控制节点等.
它是所有内存上下文的树根.
ErrorContext: 这是错误恢复处理的永久性内存环境, 恢复完毕则重设.
PostmasterContext: 这是Postmaster正常工作的内存环境,
由它通过fork函数产生的子进程将会删除这个环境.