细化解析:Informix初始化都做了些什么

来源:岁月联盟 编辑:zhuzhu 时间:2007-09-14

onstat工具

为每一台机器安装软件

检查$INFOMRIXDIR/release目录下的release notes

配置推荐的核心配置参数

准备磁盘空间

设置所需环境变量

创建一个sqlhosts文件

在$INFORMIXDIR/etc目录下设置onconfig文件

利用oninit工具初始化online

用户在初始化系统签应该执行阅读$INFORMIXDIR/release目录下的release note。在该文件中包括了许多与操作系统、内核参数以及系统更新相关的重要信息。

机器在出厂时已预置了核心配置参数,但如果用户自己需要,则需要进一步调整这些参数。关于核心参数配置请检查release notes。

为系统准备磁盘空间时,必须首先正确设置如下权限:

 

chmod 660 device_name chgrp informix device_name chown informix device_name

我们建议用户最好能为原始设备建立链接文件,原因有两个:

1.可以利用链接命令描述设备使用信息,例如那一个chunk在使用那一个设备;

2.便于恢复。

在UNIX系统中利用ln命令建立链接

环境变量

INFORMIXDIR     设置为informix产品所在的目录

 

PATH        包括INFORMIXDIR/bin

 

ONCONFIG      设置onconfig文件名

 

INFOMRIXSERVER   设为维onconfig参数中的DBSERVERNAM值

 

PSORT_NPROCS     设置为物理CPU VPs数

 

 

 

 

 

我们推荐所有的informix和数据库用户使用korn shell。注册环境必须在注册时自动设置。一般来说,所有环境变量在.profile中设置。我们希望所有系统用户使用同一注册文件。Informix必须设置的环境变量如上所示。

连接三角

客户与动态服务器的连接包括三个部分。环境变量INFORMIXSERVER是指向通讯配置文件内某一条目的指针。通讯配置文件的默认路径和名称为 $/INFOMRIXDIR/etc/sqlhosts。该文件的第一个字段包含了配置参数DBSERVERNAME或DBSERVERALIASES的值,其中DBSERVERNAME只能有一个,而用户可以通过环境变量INFORMIXSQLHOSTS改变通讯配置文件的存储路径及名称。

 

通讯配置文件(sqlhosts)的记录格式如下:

 

dbservername netttype hostsname servicename

 

 

各字段的含义如下:

dbservername    

onconfig 文件中的DBSERVERNAME或DBSERVERALIASES

nettype       

对于共享内存连接来说是onipcshm      

对于TLI TCP/IP连接来说是ontlitcp

对于sockets TCP/IP连接来说是onsockcp

hostname    机器的主机名

servicename  文件/etc/services中的服务名,对于共享内存连接方式无用

系统初始化

 

#root dbspace配置

 

ROOTNAME       rootdbs       #root dbspace名

 

ROOTPATH       /dev/online_root   #构成root dbspace的设备路径

 

ROOTOFFSET      0          #root dbspace设备的偏移量(Kbyte)

 

ROOTSIZE       50000         #root dbspace大小(Kbyte)

 

#磁盘镜像配置参数  

 

MIRROR        0           #镜像标志(YES=1,NO=0)

 

MIRRORPATH                 #镜像root dbspace设备额路径

 

MIRROROFFSET     0          #镜像root dbspace设备的偏移量

 

#物理日志配置

 

PHYSDBS       rootdbs       #物理日志(dbspace)的位置

 

PHYSFILE       1000         #物理日志文件大小(Kbytes)

 

#逻辑日志配置

 

LOGFILES       10          #逻辑日志文件数量

 

LOGSIZE       3000         #逻辑日志大小(Kbyte)

动态服务器的初始化包括两部分:磁盘初始化,创建root dbsapce。root dbspace中有12页专门用于存放系统信息,称为系统保留页。剩余空间中包含被称为chunk free list的页,50页tblspace ,4页database tablespace。在root dbspace中还存储sysmaster和sysutils数据库。

 

在系统初始化时,物理日志和逻辑日志都自动建立在root dbspace中。逻辑日志的最优大小很难确定,因为与各系统的事务活动状况紧密相关。刚开始时可以将其大小设置为3至5MB,如果不够可以随时追加。

 

在初始化时应创建一个较小的物理日志。因为在DBMS系统中,尤其在OLTP环境下,数据库的操作非常频繁,日志中必须记录大量的信息,所以用户最好能将多个日志分布在不同的设备上。有一种非常简单的方法:既在系统初始化完毕后,将物理日志移至其它设备,并扩大其空间。一般来说物理日志大一些为好(300M-500M),这样可以避免频繁地初始化检查点(物理日志75%满时进行)。

 

请一定牢记,root dbspace的位置和初始chunk的大小是无法改变的,除非重新初始化系统,但这将清除现有系统中的所有信息。

 

root dbspace的镜像功能可以在初始化时打开也可以在以后打开。

 

 

消息和磁带参数

 

#诊断

 

MSGPATH       /dev/informix/online.log   #系统消息日志文件路径

 

CONSOLE      /dev/console          #系统控制台消息路径

 

ALARMPROGRAM    /usr/informix/log_full.sh   #报警程序路径及名称

 

#系统归档磁带设备

 

TAPEDEV       /dev/null           #磁带设备路径

 

TAPEBLK       16              #磁带块大小(Kbytes)

 

TAPESIZE       10240             #磁带最大容量(Kbytes)

 

#日志归档磁带设备

 

LTAPEDEV      /dev/null           #日志磁带设备路径

 

LTAPEBLK      16               #日志磁带设备大小(Kbytes)

 

LTAPESIZE     10240             #输出到磁带上的最大数据量(Kbytes)

 

STAGEBLOB                     #INFORMIX光机缓冲区

变量MSGPATH中记录了系统消息日志文件的位置和名称。在运行时应随时监控该文件。用户可以另开出一屏,对该文件运行tail -f。系统消息将不断地添加在消息文件后,用户应该经常注意该文件的长度。

 

我们建议应将CONSOLE重定向到一个与MSGPATH同一目录下的文件上。

 

磁带设备参数用户系统归档和逻辑日志备份。参数ALARMPROGRAM被自动设置为log_full.sh。该文件在逻辑日志满时,自动启动ON_BAR备份逻辑日志。如果不需要此功能,只需要将ALARMPROGRAM设置为no_log.sh文件。

 

差数STAGEBLOB只对INFORMIX DYnamic Server/Optical系统有效。

系统配置

 

#系统配置

 

SERVERNUM      1            #每个服务器的唯一值

 

DBSERVERNAME     onlineshm        #数据库服务器主名

 

DBSERVERALLASES   onlinesoc        #数据库服务器别名

 

NETTYPE       ipcshm,,10,CPU      #为nettype配置轮询线索

 

NETTYPE       soctcp,2.25.NET

 

DEADLOCK_TIMEOUT  60            #在分布环境下等待锁的最长时间

 

RESIDENT       1            #强制驻留标志(YES=1,NO=0)

 

MULTIPROCESSOR   1             #0单处理器,1多处理器

 

NUMCPUVPS      10            #用户cpu vps 数量

 

SINGLE_CPU_VP    0            #如果非0,限制CPU VP为1

 

NOAGE        1            #进程调度

 

AFF_SPROC      0            #绑定初始处理器

 

AFF_NPROCS     10            #绑定处理器数

 

动态服务器必须具有唯一的SERVERNUM。给参数用作系统共享内存段的码(key)。客户连接时根据参数DBSERVERNAME确认服务器,所以该参数也必须唯一,同时它也必须与通讯配置文件中的条目匹配。DBSERVDERNAME或DBSERVDERALIASES都必须与一种通讯接口(共享内存,tli,sockets)相应。在通讯配置文件中必须包括所有的服务器名。 如果系统内存严重不足,UNIX会将某些进程整个交换出实存。通过设置RESIDENT参数,可以保证共享内存的驻留段始终在共享内存中不会被交换到磁盘上,否则系统的性能将会受到极大的影响。

 

许多UNIX操作系统会降低长时间运行的进程的优先级。组成服务器的oninit进程因而会受到影响,导致系统性能下降。参数NOAGE将禁止这种情况的发生。该参数与系统平台有关。如果在系统中出现上述现象,但系统又不支持NOAGE参数,可以利用renice命令提高优先级。ps命令的PRI列表示进程的优先级。在某些系统上,利用top命令也可以显示进程优先级。

 

NETTYPE

 

参数NETTYPE中定义了客户与动态服务器连接的方式。如果要与系统连接,就必须为每一类连接定义一个NETTYPE以记录网络和通讯协议的类型。

 

NETTYPE的第二个字段指定了为该协议启动的轮询(poll)线索数。这些轮询线索负责客户与服务器间的通讯。一般来说,一个轮询线索最多可以为100个用户服务。关于如何配置线索数目才能达到最优,将在以后的章节中详细讨论。

 

NETTYPE的第三个字段决定了该协议的连接数。共享内存协议利用此参数决定共享内存消息段的大小。NETTYPE的最后一个字段决定了轮询线索应在那一种VP类上运行。有两种VP类可以选择:CPU或NET。属于NET类的VP包括SOC,TLI或SHM。在CPU VP上运行的效率最高,但只能运行一种通讯协议。

 

如果轮询线索运行在CPU VP上,轮询线索数不能超过CPU VP数。但如果轮询线索运行在NET类VP上,轮询线索数将决定SOC,TLI,或共享内存VP的数量,意即系统将为每一轮询线索启动一个NET类VP

 

如果如下设置NETTYPE

 

sockcp,2,10,NET

 

系统会启动两个SOC VP。

 

注意每一轮询线索能支持的连接数即为最大用户数,所以上例中的设置能支持20个用户。请不要超过最大用户限制,否则会给轮询线索带来许多负担。

 

 

配置CPU VP

 

正确配置CPU VP的数量对于系统的性能有很大的影响。系统需要有足够多的CPU VP来加速线索的执行从而保证系统中其它进程能占用足够的CPU时间。

 

具体的配置方法如下:

 

利用onstat -g rea 命令监控线索就绪队列。检查CPU VP类线索的数目是否总是大于CPU VP地数量。若是,则表明总是有有一些CPU线索在等待CPU VP,应该增加CPU VP数量。

 

命令onstat -glo可以显示CPU VP的信息。

 

从系统的角度来说应随时监控分析CPU的使用情况,以了解系统是否还要潜力可挖。有很多系统提供这一类工具,例如sar。只要有CPU空闲时间或I/0等待时间,就说明可以增加CPU VP数量以完成更多的任务(在相同时间内)。但如果系统CPU资源已充分利用,增加CPU VP的数量也不会提高系统性能。

 

 

处理器绑定

 

所谓处理器绑定(processor affinity)是特定的进程只能在特定的CPU上执行。特定的CPU仍然能为其它进程服务,但特定的进程只能在该CPU上执行,如果平台支持,INFORMIX动态服务器可以将CPU VP(oninit)绑定到指定的处理器上。

 

处理器从0开始连续编号。在某些SMP平台上,由一个CPU专门处理系统中断。如果配置的CPU VP数量小于物理处理器数量,则应避免将CPU VP绑定到处理中断的CPU上。利用mpstat 命令可以查出那一个CPU处理中断(由intr列标识)。

 

如果系统用户非常多(>;300).用户进程可能会与CPU VP争夺处理器。此时可以将CPU VP绑定到一些处理器上,而将用户进程绑定到另外的处理器上。例如,系统有16个CPU,则将CPU VP绑定到0至10号CPU上,而将所有的应用进程绑定到11-15号进程上。如何在这两类进程分配CPU数目,需要通过测试才能达到较优的性能。

配置环境

共享内存参数的最优配置依赖于动态服务器的运行环境。我们讨论的系统运行环境包括:数据载入,索引建立,OLTP和DSS。在实际的系统中,最好为上述不同的环境分别建立参数配置文件。

例如:

 

数据载入:     onconfig.load 索引建立:     onconfig.index OLTP:       onconfig.oltp DSS:        onconfig.dss