GBase 8s共享内存分为三个部分。
- 常驻内存段:包含缓冲池和其他的系统信息。
- 虚拟内存段:包含线程和会话的信息,以及他们所使用的数据。这部分内存会动态增加,因此由数据库服务器负责申请和释放内存空间。
- 消息内存段:消息缓冲用于应用程序和数据库服务器的通信,这部分是可选的,仅当使用共享内存连接时才需要进行配置。每个共享内存连接占用的内存开销是12KB。
常驻内存段
缓存池是共享内存的驻留部分的主要存储空间,是最大的一部分内存,缓存池存放表中的数据页,用来加快表的访问速度。当多个用户读写相同的数据时,将不在需要从磁盘中访问数据。
可以定义多个不同页面大小的缓存池,每个页面大小的缓存池只能有一个,每个缓冲池的大小可以通过配置文件中的bufferpool参数修改。
服务器会在共享内存中申请一些固定长度的内存结构,也称为内部表,这些表和数据库中的表是不同的。
这些内部表和数据库中的一些重要资源是相关联的,这些内部表的大小可以通过调整配置文件中的共享内存资源的大小来调整。
常驻内存段中的物理日志缓冲
物理日志主要是为了数据库服务器的容错机制而引入的,当数据被从磁盘读到内存之后,如果被修改了,物理日志包含了第一次被修改的数据页和索引页的前映像。
为了减小物理日志磁盘IO的次数,其写日志时使用了缓存phybuff,而不是每次都写盘,先写到缓存,由数据库控制在所需要时将缓冲中的数据刷新到物理日志
常驻内存段中的逻辑日志缓冲
当数据库记日志时,逻辑日志包括了数据操作语句(DML)的内容,也保存数据定义语句(DDL)的操作记录,一个实例中的所有数据库共享相同的逻辑日志文件,不同数据库中的事务日志在日志文件中可以交叉存放。
写到数据库日志中的数据可能很大,为了减少写盘的IO次数,数据先放在缓冲logbuff中,之后再写到磁盘中,服务器为逻辑日志申请三个缓冲。