首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

informix系列之基础概念

本文是对>中体系结构的一个简单笔记,文中插图也出于此书。有以下四部分的内容

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:其它工作

各类虚拟处理器的分工

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180303G0TOCO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券