本文是对>中体系结构的一个简单笔记,文中插图也出于此书。有以下四部分的内容
1、informix实例
2、informix的共享内存
3、informix的磁盘使用
4、虚拟处理器与多线程
1、informix实例
informix实例就是一个经过配置的磁盘空间、内存与进程的集合,在onconfig文件中可对实例进行配置,一个实例对应一个onconfig配置文件。一台计算机上面可配置一个或多个实例。通常需要设置以下环境变量来确定当前的实例
INFORMIXDIR:informix的安装目录
ONCONFIG:定义当前实例的onconfig配置文件
INFORMIXSERVER:定义要连接的数据库服务器名
INFORMIXSQLHOSTS:定义使用的sqlhosts文件的完整路径
PATH:包含$INFORMIXDIR/bin这个路径
1.1、sqlhosts文件定义数据库服务器
在这个文件中包括以下4列
DBSERVERNAME NETTYPE HOSTNAME SERVICENAME
DBSERVERNAME:指定数据库服务器名,在onconfig文件中引用
NETTYPE:定义连接类型,格式为ddiiippp
dd:数据库产品
on--IDS服务器
se--informix se服务器
iii:网络接口,
ipc--进程间通信,用于共享内存和流管道连接
soc--插槽
tli--传输层接口
ppp网络协议
shm--共享内存连接
tcp--tcp/ip协议
str--流管道
nmp--命名管道
spx--网络连接中的ipx/spx协议
HOSTNAME:包含实例的计算机名
SERVICENAME:dbservername使用的服务,在系统服务文件中定义/etc/services
1.2、实例的状态
实例的状态确定用户是否能够连接数据库以及如何连接。管理员可通过onmonitor\onmode\oninit命令来修改实例的状态,改变实例的状态将影响所有连接的用户。
脱机(off-line):任何用户都不能连接数据库,完全脱机
静态(quiescent mode):类似unix中的单用户模式,只允许管理员连接
联机(on-line):正常连接方式
只读(read-only):不允许更新数据库
恢复(recovery):如从一个文件中恢复数据,从脱机切换到静态、从脱机切换到联机
关闭(shutdown):从联机到静态
oninit -s:从脱机到静态
oninit:从脱机到联机
onmode -m:从静态到联机
onmode -s:从联机到静态
onmode -u:从联机到静态,立即终止用户对话
onmode -k:从任何方式到脱机,立即终止用户对话
2、informix共享内存
共享内存是个操作系统特性,提供了对不同任务使用内存的功能。在IDS联机时,IDS请求一定的共享内存量(在onconfig文件中配置),该内存由操作系统进行初始化分配成共享内存段,IDS链接共享内存段。使用ipcs -m浏览物理段,用informix的命令onstat -g seg查看逻辑段
共享内存有三种不同的部分:常驻部分、虚拟部分和消息部分
2.1、共享内存常驻部分
共享内存常驻部分包括:缓冲池、物理日志缓冲、逻辑日志缓冲。其中缓冲池存放从磁盘读取的数据,是共享内存的最大区域。在onconfig文件中一下参数配置
BUFFERS:配置缓冲池的缓冲区数量(大小与ids的页一致)
PHYSBUFF:物理日志缓存大小(kb)
LOGBUFF:逻辑日志缓存大小(kb)
以下着重记录缓冲池这部分的内容,它是用来存放informix从磁盘读取数据的地方,之后就可以从缓冲池中读取数据,减少io和访问时间。
缓冲池可以分为若干个LRU队列,队列数可以通过onconfig文件中的LRUS参数设置,可以通过onstat -R监视队列,每个LRU队列又分为两个队列
FLRU:记录缓冲池中的自由和未修改页面
MLRU:记录缓冲池中已修改页面
图中一共有4个LRU队列,每个队列分别有一个FLRU和MLRU
上图表示LRU队列与缓冲池的关系,LRU实际是缓冲池里页的指针,通过LRU指向缓冲池里的页面。
当用户访问数据库里的数据时,informix首先从缓冲池中搜索是否含有该数据。有的话直接返回,不再进行磁盘IO。如果缓冲池中没有该数据,再从磁盘中读取数据放入随机选择的一个LRU队列指向的缓冲池中。如果包含该数据的页面被修改,则放入MLRU队列中,原数据放入物理日志缓冲区中,数据的变更记录放在逻辑日志缓冲区内。缓冲池内的数据将定期的刷新到磁盘上,保证数据库的物理一致。
在onconfig文件中,以下几个参数将控制队列的刷新频率
CKPTINTVL:校验点之间的间隔,当达到校验点的时间时,页面清理程序将刷新MLRU指向的页面到磁盘中,和物理、逻辑日志缓冲区。
CLEANERS:刷新MLRU页面的最大线程数量
LRU_MAX_DIRTY:当已修改页面的比例到达此值时,开始清理LRU队列。
LRU_MIN_DIRTY:当已修改页面的比例到达此值时,停止清理LRU队列。
2.2、共享内存虚拟段
informix用虚拟内存记录用户对话期间发生的任务。虚拟内存的初始长度由onconfig文件中的SHMVIRTSIZE参数确定。
SHMVIRTSIZE:初始共享内存虚拟段大小(kb)
SHMADD:每次增加的共享内存段大小(kb)
SHMTOTAL:总共共享内存大小(kb),设置为0则无限制
上图为共享内存虚拟段的内容,包括会话池、线程池、字典池、存储过程池、排序池、大缓冲区池以及全局池。
虚拟段的分配和释放是动态进行的,如果初始虚拟内存耗尽,则根据上述提到的参数再动态申请。
3、informix的磁盘使用
informix的所有数据都存放在磁盘上,有原始设备和熟文件空间之分。在这里做一些简单介绍。
3.1、物理存储单元
物理存储单元就是分配给informix的磁盘空间,可以分为原始设备和熟文件。
3.1.1原始设备
informix用字符特殊设备作为原始磁盘空间,通常使用原始设备进行磁盘存储更加有效,读数据时,可以越过操作系统直接与共享内存交互。原始设备的另一个优点是磁盘空间是连续的,这样在查找数据的时候将大大提高性能。
3.1.2熟文件
熟文件即操作系统的文件,对熟文件的io操作将由操作系统管理。数据交互时将首先放在操作系统缓存内,然后再到共享内存。效率比原始设备要低的多,优点是配置jian'd简单。
以下是物理单元的具体划分:
页:是磁盘可分配的最小单元,可以使用onstat -b命令查看,通常为2kb或4kb(在上面介绍的共享内存常驻段里缓冲区里的单元就是这个页长度)。磁盘上的数据就是存放在这个页内,informix读写数据时,都是以页为单位,一页可以包含表中的多行数据。
块:块可以是一个磁盘或磁盘里的一部分,在生成块的时候要指定其长度(这个块包含多个页)
块与页的关系
区域:在一个块中相邻的页,在创建数据表的时候,合理的指定区域长度能把该表的数据集中在一起,从而达到优化数据的读取。有两种区域:初始区域(EXTENT SIZE)和后续区域(NEXT SIZE),初始区域指生成表格时分配的空间量,后续区域指当一个区域满的时候,为其再分配的空间量。
块、区域、页的关系
3.2、逻辑存储单元
逻辑存储单元定义informix如何管理物理存储单元中的数据。下面对几个重要的逻辑单元做下简单的介绍。
dbspace:一个dbspace通常包含多个块,创建dbspace之后就可以在上面创建数据库、表格和索引。在生成dbspace的时候,会自动分配一个块。之后如果空间不够可以再增加块到该dbspace内。
比较特殊的是informix的根dbspace,里面包含实例的配置信息。首次初始化实例时,根据onconfig文件里的内容生成根dbspace。
可以使用以下命令来创建其它dbspace和块,并添加其它块到指定的dbspace内
onspaces -c -d dbspace1 -p /dev/rdesk -o 0 -s 100000
onspaces -a dbspace1 -p /dev/rdesk2 -o 0 -s 100000
onspaces -c -t tmpdbs -p /dev/rdesk3 -o 0 -s 100000(临时表空间,需在onconfig文件中的DBSPACETEMP参数指定)
表格空间:为一张数据表使用的页集合,不需要用户来指定,informix自己生成.
数据库、表格、索引:数据库里包含表格和索引,存储在dbspace内,在生成数据库的时候应指定dbspace,否则将在根dbspace中。创建数据表时,默认在包含该表的数据库所在的dbspace内,也可以指定到某个dbspace内,以提高检索速度。
4、虚拟处理器与多线程
informix IDS能够并行处理多个任务,要依赖于虚拟处理器的实现,每个虚拟处理器都可以并行执行多个线程处理多个客户端的连接,这些虚拟处理器实际上是操作系统进程(oninit进程)。在onconfig配置文件中有几个参数用来配置虚拟处理器
MULTIPROCESSOR:指定是否在多处理器计算机上运行
NUMAIOVPS:ids要启动的AIO虚拟处理器的个数
NUMCPUVPS:ids要启动的cpu虚拟处理器的个数
SINGLE_CPU_VP:指定只运行一个cpu虚拟处理器
4.1、虚拟处理器分类
不同的虚拟处理器负责不同的任务,以下做简单说明
cpu:负责用户的对话线程,cpuvp的数量不应超过机器可用cpu数量
pio:写物理日志
lio:写逻辑日志
aio:数据库io
shm:处理共享内存链接
tli:处理tli网络链接
soc:处理套接网络链接
adm:负责管理工作
msc:其它工作
各类虚拟处理器的分工
领取专属 10元无门槛券
私享最新 技术干货