笔者参加了建设银行江西省分行的全省数据集中工作,其中数据库的使用与优化是系统管理的重要工作。在系统上线运行稳定之后,将数据库管理工作的经验整理出来,争取起到抛砖引玉的作用,为正在使用Informix的用户提供一些帮助。
1.建立“Informix”组和用户
建设银行江西省分行数据集中系统采用的是IBM NUMA主机,使用的是DYNIX4.3.1操作系统,我们用“menu”命令(如果是SCO Unix,要用“scoadmin”命令;在HP-UX中要用“sam”命令;在IBM AIX中就用“smit”命令)建立一个名为“Informix”的组,该组号要大于100。
同样,在DYNIX下用“menu”命令(在SCO Unix用“scoadmin”命令,对HP-UX用“sam”命令,对IBM AIX用“smit”命令)建立一个名为“Informix”的用户,该用户属于“Informix”组,用户号大于100,根目录设为“/usr/Informix”或其他目录,口令可设为“Informix”或其他。
2.安装产品
以“root”注册,设置安装所需要的环境变量:
InformixDIR=/usr/Informix
Export Informix DIR
PATH=$PATH:$InformixDIR/bin
Export PATH
再将当前目录改变到“usr/Informix”。
(1)先安装SQL,将SQL磁带或光盘插入磁带机或光驱。
使用磁带机安装步骤:
1)#cpio-icvdumB-I磁带机设备名或#tar xvf磁带机设备名
2)执行安装命令:#./installsql输入序列号及KEY。
使用光驱安装步骤:
1)首先为光驱建立一个文件系统/dev/cdrom:
2)将光盘插入光驱;
3)#mount/dev/cdrom(注意:光驱中一定要有光盘时才可执行mount命令);
4)#cpio-icvdumB-I</dev/cdrom/*
或#tar xvf/dev/cdrom/*;
5)执行安装命令:#./installsql输入序列号及KEY;
6)#umount/dev/cdrom;
7)取出光盘(注意:要先执行umount命令才可取出光盘)。
(2)顺序安装ESQL/C、4GL、ONLINE。将ESQL/C磁带或光盘插入磁带机或光驱,方法同(1),由于该行不使用4GL产品,因此未安装4GL。
3.Informix数据库参数配置及初始化
(1)操作系统上的准备工作。首先要为ONLINE存储数据分配磁盘空间,可以选择UNIX文件或原始磁盘空间作为ONLINE数据存储空间:
1)用UNIX文件作为ONLINE数据存储空间。
用这种方式的优点是方便、简单,但缺点是效率低、安全性不高。例如,在“/usr/Informix”目录下命名一个文件“ONLINEdbs”,作为ONLINE的数据存储空间,步骤如下。
以“root”注册:
#cd/usr/Informix
#cat/dev/null>ONLINEdbs
#chgrp Informix ONLINEdbs
#chown Informix ONLINEdbs
#chmod 664 ONLINEdbs
2)用原始磁盘空间作为ONLINE数据存储空间。
用这种方式效率高、安全性好,但要注意在安装操作系统时,应预留出这部分磁盘空间,并且不能格式化,还应该知道磁盘空间的设备名及各空间大小。例如,在“/dev/rdsk/os2”为安装SCO Unix时预留出的原始磁盘空间,进行如下步骤。
以“root”注册:
#chgrp Informix/dev/rdsk/os2
#chown Informix/dev/rdsk/os2
#chmod664/dev/rdsk/os2
(2)设置环境变量。
在“/usr/Informix/.profile”文件及其他与Informix同组用户的profile文件中设置下列环境变量:
InformixDIR=/usr/Informix
PATH=$PATH:$InformixDIR/bin
ONCONFIG=onconfig.srv (ONLINE配置参数文件,位于$InformixDIR/etc目录下)
InformixSERVER=srv_bank(ONLINE的名字)
Export InformixDIR PATH ONCONFIG InformixSERVER
(3)设置ONCONFIG配置文件。
以“InfoITniX”注册:
$cd/usr/Informix/etc
$cp oncongig.std onconfig.srv
用Vi编辑器修改“onconfig.srv”文件中各参数为文件“onconfig.srv”中的值即可,或用onmonitor命令配置ONLINE的参数。
(4)设置“$InformixDlR/etc/sqlhosts”文件。
以“Informix”注册:
$cd/usr/Infonnix/etc
$vi seqhosts
编辑如下:
ONLINE Server name 网络协议 主机名 Service名
Srv_bank Onipcshm srv Sty_bank
“ONLINE Server name”必须同InformixSERVER环境变量值一致;“主机名”为ONLINE所在的服务器的主机名,见“/etc/hosts”文件。
(5)启动ONLINE并初始化磁盘空间。
$oninit-iy
注意:执行这个命令时,所有在ONLINE磁盘空间上的数据都将被破坏,该命令只能在第一次初始化ONLINE磁盘空间时使用。
4.Informix日常管理、监控及维护
(1)Infomfix Server的不同状态。Informix Server有六种状态:Off line、Recovery、 Quiescent、ONLINE、Shutdown、ReadOnly。
(2)常用命令。启动ONLINE命令为:oninit(“off line”→“on line”);关闭ONLINE命令为:onmode-ky(“on line”→“quiescent”→“off line”)。
操作最好用带有GUI界面的命令“onmonitor”。
(3)Informix日志管理。无日志模式:建议不采用该模式;缓冲日志模式:具有较高的数据处理速度,但具有一定的风险性;非缓冲日志模式:比较适合关键应用程序的处理; ANSl日志模式:选择该模式的情况比较少。
(4)建立dbspace。
$onspace-c-d dbspace name-p原始磁盘设备-o。偏移量-s尺寸
参数含义:
-c:表示建立新的dbspace;
-d:dbspace name;
-p:原始磁盘设备全路径名;
-o:偏移量,以KB为单位;
-s:chunk的尺寸,以KB为单位。
(5)创建、移动和改变日志大小。修改物理日志(要求在quiescent状态下):物理日志填充到75%时系统自动引发检查点操作,同时物理日志不能太大,在检查点期间该实例的所有活动都将终止。
创建逻辑日志:创建逻辑日志后并不能立即生效,必须在0级备份后才可以。
Onstat-C-L检查逻辑日志。
C:表示正在用;
L:最后检查点。
(6)创建数据库。
方法有:Dbaccess、dbimport或直接运行SQL语句
create database db_name[in createion_dbspace][with loglwith buffered 10g Ilog mode ansi]
(7)表和索引的创建。创建表:
create tabletable_name
(colunm_name datatype)in dbspace
创建索引:
create index index_name on table_name(列名)
(8)备份及恢复。备份包括三个级别:
0级——备份整个数据库系统;
1级——备份从0级备份以后发生变化的数据;
2级——备份从1级备份以来发生变化的数据。
命令:$ontapc-s(输入0、1、2级)。在每天日终时需要对一天的数据进行备份。
逻辑日志文件备份:定时备份逻辑日志和连续备份逻辑日志;
定时备份逻辑日志:ontape-a;
连续备份逻辑日志:ontape-c;
系统恢复命令:ontape-r。
(9)Informix常用命令。
Oncheck:检查及恢复ONLINE数据库磁盘空间、数据库、表、索引等的一致性与完整性。
检查ONLINE运行状态:onstat。
onstat-d(观察ONLINE磁盘组织状况);
onstat-D(观察ONLINE磁盘读写情况,可以确定每个chunk访问的均衡情况,记住一个设备上可能会有多个chunk);
onsmt-l(监视物理或逻辑日志缓冲区的使用情况。如果pages/io除以bufsize大约为75%,则缓冲区使用率较高,小于75%,则物理日志缓冲区可能太大,如果大于90%,则缓冲区太小);
Onstat-m(监视消息日志文件,查看可能发生的特殊情况);
Onstat-F(监视系统上发生的写操作的种类);
Onstat-P(显示profile文件);
Onstat-u(显示用户线索);
Onstat-g ses session_id(显示感兴趣的会话情况)。
5.Informix性能调整
性能调整是应用系统中十分复杂的任务,涉及面较广,包括硬件配置、操作系统配置、数据库设置及应用软件处理性能等。这里只讲后两个方面。
(1)数据库配置原则
1)选择硬盘要传输速度高、定位时问短;大量的小盘比少量的大盘要好。
2)ONLINE磁盘空间要尽可能与操作系统分开;物理、逻辑日志分开(特别是OLTP环境下),最好不要再放其他数据。
3)最好使用数据库临时空间,这比系统空间的效率要高;最好使用多个临时数据库空间,这样将可能大大地提高操作效率,如使用多个临时dbspace,要将它们放在与其他活动频繁的dbspace不同且彼此分开的磁盘上。
4)明智地使用数据分片;不要对小表进行分片;不要对所有表进行分片;要确定出数据量大且频繁访问的表;将表的每个分片放在单独的磁盘上;选择适当的分割方式(目的是为了平衡总体I/O,并可以使优化器对频繁运行的查询消除对不必要分片的扫描)。
5)日志模式选用“no buflog”模式,这对银行联机系统比较重要。
6)在OLTP环境中应当将最活跃的表单独放在一个dbspace中;最活跃的dbspace Chunk创建在离磁盘中心最近的地方,这样可减少磁盘的移动时间。
7)注意Chunk创建顺序对I/O均衡的重要性。
8)注意系统中检查点的平均持续时间,因为在该时间内系统处于停滞状态。
(2)数据库设计原则
1)为性能而改变常规设计,为追求性能可以在某表中增加子段等。
2)设计时,保证记录长度小于1个ONLINE页,跨越多页的长记录对性能无益。
3)一般情况下不要使用BLOBS。
4)建立索引要有目的性。
5)设计时,最好标出每张表的记录数和访问频率等,可作为划分磁盘的依据。
6)在设计表和表之间的关联时,在银行的应用系统中,一般将外键关系转换为应用逻辑的处理。
(3)应用程序中对数据库的访问(以下原则在“批处理”模块中特别重要)
1)对频繁使用的语句要进行prepare处理,prepare可节省C/S的网络交换量和加快应用处理速度。
2)对于大量使用Insert操作的情况,要尽可能使用Insert游标,尤其是数据较多时效果比较明显。
3)对数据库进行操作时,Where语句尽可能使用主键而非ROWID,在对分割的表操作时更不能用ROWID。
4)避免不必要的类型转换;SQL语句要尽可能精练。
5)decimal类型数据的各种运算和转换代价是高的。
6)避免频繁的数据库间切换。
7)不要Fetch不需要的行、列,只更新被改变的列,这样可减少软件冲突,避免锁住索引项。
8)在LOAD数据库时最好先关闭日志或索引,LOAD结束后再建索引。
9)在FORK子进程时,最好在子进程中先关闭数据库连接,然后重新连接数据库。
10)对大量数据做修改后,最好执行一次UPDATE STATISTICS操作。
11)在对数据库操作时,一定要注意事务处理的完整性:BEGIN WORK,COMMIT WORK和ROLLBACK WORK。
12)在连接数据库时一定要注意考虑将来进程数会不会超过数据库限制的可能性,尤其是主机直接带终端的处理方式可能有这个危险。
13)在处理与“根据户名查账号”类似的交易时,最好在程序中建立索引后查询,然后再删除索引,看性能是否有所提高。
14)删除大量数据时,要考虑先删除索引再删除数据,同时注意长时间事务发生的可能性。
一般来讲,数据库性能的调整是一个复杂的任务,需要系统管理员的多次测试和摸索才能调整出最佳性能。本文只是对笔者接触到的一个系统实例进行了总结,希望能对各位网络管理员的工作起到一定的帮助作用。