Chinaunix首页 | 论坛 | 博客
  • 博客访问: 435501
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-18 00:10:50

数据库系统

1. 系统内存的空间结构

 

INFORMIX系统的内存空间可以分为两大部分:虚拟处理器专用内存(VP专用内存)和共享内存。共享内存空间可以进一步划分为以下四个部分:常驻部分(resident portion)、虚拟部分(virtual portion)、IPC通讯部分(IPC communication portion)、虚拟扩展部分(virtual-extension portion)。具体的内存结构可见图1-5

1)虚拟处理器专用内存

就是进程的私有内存空间,是进程使用的一块包含数据和控制信息的内存区域,在进程启动或创建时分配,并为进程排他访问。由于INFORMIX系统采用多进程、多线程体系结构,有关线程的结构和会话信息存放在共享内存的虚拟部分,这两部分合起来就是第3.2.1一节中讲到的进程缓冲区

用户不能直接设置虚拟处理器专用内存的大小,数据库系统通过启动的虚拟处理器个数、用户的连接数等,来决定这部分的内存空间。下列配置参数和虚拟处理器专用内存有关:

VPCLASS:设定系统要启动虚拟处理器的个数。

NETTYPE:设定系统启动的监听线程的数目、最大用户连接数。

STACKSIZE:设定用户线程的堆栈可以使用的内存空间。

2)共享内存

就是系统的共享内存,存放数据字典、锁、要操作的用户数据等。可使用下列配置参数对整个共享内存进行设置:

SHMTOTAL:设定共享内存允许使用的最大内存空间。

SHMBASE:设定共享内存空间的起始地址。该参数的设置和操作系统有关,不要修改。

SERVERNUM:设定数据库实例的编号。该参数使同一台机器中的多个实例使用的内存空间不会重叠。

3)共享内存的常驻部分

共享内存的常驻部分可以进一步划分为:缓冲池(buffer pool)、逻辑日志缓冲区(logical-log buffer)、物理日志缓冲区(physical-log buffer)、锁表(lock table)。

缓冲池

缓冲池用来存放用户要处理的数据,就是第3.2.3一节中讲到的用户数据缓冲区。下列配置参数和缓冲池有关:

BUFFERS:设定缓冲池的内存空间。

LRUS:设定系统启动时创建的LRU队列(LRU queue)的数目。配置参数BUFFERS除以该参数,就得出每个LRU 队列要管理的缓冲区的数目。

逻辑日志缓冲区

逻辑日志缓冲区用来记录对数据库更新的日志信息,就是第3.2.5一节中讲到的日志缓冲区。下列配置参数和逻辑日志缓冲区有关:

LOGBUFF:设定逻辑日志缓冲区的内存空间。系统根据该参数分配两个逻辑日志缓冲区,循环使用。在当前所有事务往一个缓冲区中写入日志信息时,日志写进程可以将另一个缓冲区中的日志信息写入磁盘。

物理日志缓冲区

物理日志缓冲区用来存放数据页被更新之前的内容,下列配置参数和物理日志缓冲区有关:

PHYSBUFF:设定物理日志缓冲区的内存空间。系统根据该参数分配两个物理日志缓冲区,循环使用。其使用方式和逻辑日志缓冲区类似。

锁表

锁表用来存放数据库系统中的所有锁信息,就是第3.2.6一节中讲到的锁表缓冲区。下列配置参数和锁表有关:

LOCKS:设定数据库系统初始的锁数目。在需要的锁数目超过该参数时,系统自动加倍可使用的锁数目,最多可以加倍15次。

3)共享内存的虚拟部分

共享内存的虚拟部分可以动态地扩展,下列配置参数和共享内存的虚拟部分有关:

SHMVIRTSIZE:设定虚拟部分起始的内存空间大小。

SHMADD:设定往虚拟部分增加的内存空间数量。在共享内存虚拟部分的空间不足时,系统根据该参数增加内存空间。

共享内存的虚拟部分可以进一步细分为多个内存结构,每一部分都有自己的内存池。数据库系统需要某一部分的内存空间时,首先从相应部分的内存池中查找。如果没有空间,就从共享内存虚拟部分的全局池中分配。如果全局池中也没有足够的空间,数据库系统就从操作系统获取内存增加到共享内存的虚拟部分。共享内存的虚拟部分可以细分为以下部分:字典高速缓存(dictionary cache)、线程结构和堆栈以及会话信息(thread structurestacksession data)、SQL语句高速缓存(sql statement cache)。

字典高速缓存

字典高速缓存就是第3.2.2一节中讲到的数据字典缓冲区,用户不能单独设置此部分的内存空间。

线程结构、堆栈和会话信息

该部分加上虚拟处理器专用内存,就是第3.2.1一节中讲到的进程缓冲区,用户不能单独设置此部分的内存空间。

SQL语句高速缓存

SQL语句高速缓存用来存放优化器生成的SQL语句执行计划等,就是第3.2.4一节中讲到的SQL语句缓冲区。下列配置参数和SQL语句高速缓存有关:

STMT_CACHE:设定系统是否使用SQL语句高速缓存功能。

STMT_CACHE_SIZE:设定SQL语句高速缓存的内存空间。

STMT_CACHE_HITS:设定SQL语句被放入缓存前的访问次数。

STMT_CACHE_NOLIMIT:设定是否允许扩展SQL语句高速缓存的内存空间。

4)共享内存的IPC通讯部分

如果数据库系统使用了共享内存通讯方式,则创建此部分内存空间,专门用于共享内存通讯。其空间大小由通讯连接数乘以12KB得到。

5)共享内存的虚拟扩展部分

如果用户在数据库系统中创建了用户定义函数,并定义了用户定义虚拟处理器,或者安装、使用了datablade模块,则创建此部分内存空间。

 

2. 用户数据缓冲区的管理

 

INFORMIX系统中,缓冲池就是第3.2.3一节中讲到的用户数据缓冲区。系统根据配置参数LRUS的设置,均匀地将缓冲区划分为多个部分,每一部分都使用一个LRU队列进行管理。

一个LRU队列由两张表组成:FLRUfree least-recently used)、MLRUmodified least-recently used)。 FLRU表记录LRU队列中没有被修改的数据页,MLRU表记录LRU队列中已经被修改的数据页。在内存中的数据页被更新后,就放入MLRU表。

当用户线程需要内存空间存放数据时,数据库系统随机地从所有的FLRU表中选择一个。如果找到空闲的数据页,系统就停止查找。如果找不到空闲的数据页,系统就选择其它的FLRU进行处理。

在所有的FRLU表中都找不到空闲的数据页后,数据库系统激活页清除进程,根据MLRU表,将缓冲区中已经被修改的脏数据页写入磁盘。

阅读(766) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~