Informix数据库日常维护脚本

Informix数据库日常维护脚本

检查各个dbspaces的空间使用状况:

select name dbspace,sum(chksize) allocated,sum(nfree) free,round(((sum(chksize)-sum(nfree))/sum(chksize))*100)||"%" pcused
form sysdbspaces d,syschunks c
where d.dbsnum=c.dbsnum group by name order by 4 desc

剩余空间肯定是越大越好了

显示各个dbspaces的I/O状况:

select d.name,fname path_name,sum(pagesread) diskreads,sum(pageswritten) diskwrites
from syschkio c,syschunks k,sysdbspaces d
where d.dbsnum=k.dbsnum and k.chknum=c.chunknum
group by 1,2 order by 3 desc

根据各个dbspaces的I/O来调整表的布局,使整个系统I/O均衡

检查哪个表具有最多的磁盘I/O:

select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites
from sysptprof
order by 3 desc,4 desc

同上。

检查表的extent的分布状况:

select t.tabname, count(*) num_ext
from sysextents e, npmdb:systables t
where e.tabname=t.tabname
and dbsname = "npmdb"
and t.tabname not like "sys%"
group by 1
having count(*) > 1
order by 2 desc

表的extent建议最大不超过30个,如果太大,就需要重建表修改extent size的大小从而修改extent的数量

检查表中索引的层数(越少越好):

select idxname, levels from sysindexes order by 2 desc

检查命中率不高的索引(nrows和unique越接近越好):

select tabname, idxname, nrows, nunique
from systables t, sysindexes I
where t.tabid =i.tabid and t.tabid > 99
and nrows > 0 and nunique > 0

当索引的效率不高的时候,需要根据实际情况修改

看数据库里面那些表的碎片比较多(碎片小比较好)

select dbsname , tabname ,count(*), sum(size)
from sysextents
group by 1,2
order by 3 desc;

表和索引的读写情况,(考查那个数据库实体读写比较多)

select dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites)
diskwrites
from sysptprof
order by 3 desc, 4 desc

那些表的锁竞争比较厉害(越小越好)

select a.tabname,nrows,lockwts,deadlks
from sysmaster:sysptprof a,systables b
where a.tabname=b.tabname and lockwts>0
and a.dbsname = name
and b.tabid >= 100
order by tabname;

表的顺序扫描数(OLTP系统的话,大表的顺序扫描数越小越好)

select a.tabname,nrows,seqscans
from sysmaster:sysptprof a,systables b
where a.tabname=b.tabname and seqscans>0
and a.dbsname = '库名'
and b.tabid>=100
order by tabname;

查看informix数据库表占用空间大小情况:
在sysmaster数据库中查询表systabnames,sysptnext。其中systabnames.partnum=sysptnext.pe_partnum.
执行以下sql:

select tabname,sum(pe_size) from systabnames,sysptnext
where partnum=pe_partnum
and tabname='table_name'--(table_name为要查询的表名)
group by tabname

(注:查询结果中pe_size的值,单位IBM是4k,HP-UX是2k)

用onstat查是那个线程在干的,然后再分析。
我是用onstat -u查看到锁数的。
用onstat -g ses 找出session id
再用onstat -g sql session id查看它在做什么。

update statistics for table temp_user; 

Informix Online数据库日常管理及维护
1、启动、关闭Informix数据库

1.1、自动启动Informix

启动Online命令为:oninit
但一般情况下,将启动命令建立在/etc/rc2.d目录下,名字为S96informix,这样当启动操作系统时,Online随之启动。
编辑文件/etc/rc2.d/S96informix为如下内容:
INFORMIXDIR=/usr/informix
INFORMIXSERVER=picc_online
ONCONFIG=onconfig.picc
export INFORMIXDIR NFORMIXSERVER ONCONFIG
INFORMIXDIR/bin/oninit
修改文件属性如下:$chmod +x /etc/rc2.d/S96informix

1.2、自动关闭Informix

关闭Online命令为:onmode -ky
但一般情况如下,将关闭命令建立在/etc/rc0.d目录下,名字为K01informix,这样当关闭操作系统时,Online随之关闭。
编辑文件/etc/rc0.d/K01informix如下:
INFORMIXDIR=/usr/informix
INFORMIXSERVER=picc_online
ONCONFIG=onconfig.picc
export INFORMIXDIR INFORMIXSERVER ONCONFIG
INFORMIXDIR/bin/onmode -ky
修改文件属性如下:$chmod +x /etc/rc0.d/K01informix

2、Informix Online常见工作模式

offline(停止态)
quiescent ( 系统维护态)
online(运行态)

3、管理Informix Online磁盘空间
Online初始化时,自动建立了一个名为rootdbs的dbspace。该rootdbs存储Online的管理信息,包括物理日志、逻辑日志等。当你建立一个数据库或表时,如果不指定dbspace,作为缺省,该库或表建立在rootdbs中。所以,如果你想将库或表建立在某个dbspace中,则必须在SQL语句中指定dbspace名字。如数据库名为
‘stores’,我们将这个数据库建立在’workdbs’dbspace中,SQL语句如下:

create database stores in workdbs;

另外,建chunk或dbspace时,要指定原始磁盘设备名路径,所需磁盘空间大小,以及该块磁盘空间在原始磁盘设备中的偏移量。其中,偏移量非常关键,要小心设置,否则容易造成chunk块之间空间上的重叠与覆盖。
例如:假定原始磁盘设备/informixdbs1有500M空间,其中rootdbs用去前100M,如果要在/informixdbs1中建立一个新的chunk,偏移量应大于100M。
1) 用onspaces命令建立dbspace
$onspaces -c -d dbspace名字 -p 磁盘设备 -o 偏移量 -s 尺寸
其中:-c: 表示建立新的dbspace
-d: dbspace名字
-p: 原始磁盘设备全路径名,如/informixdbs1
-o: 偏移量,以K字节为单位
-s: dbspace中第一个chunk 尺寸,以K字节为单位
2) 用onspaces命令增加chunk
$onspaces -a dbspace名字 -p 原始磁盘设备 -o 偏移量 -s 尺寸
其中:-a: 表示为某个dbspace增加一个chunk, 后跟dbspace名字
-p: 原始磁盘设备全路径名,如/informixdbs1
-o: 偏移量,以K字节为单位
-s: chunk的尺寸,以K字节为单位
例如某数据库系统,在原始磁盘设备/informixdbs1上建立三个DBSPACE:
rootdbs:Online初始化时缺省建立,第一个chunk尺寸为100M, 偏移量为0;
workdbs:存放应用数据库数据,第一个chunk尺寸为100M,偏移 量为100M;
tmpdbs:存放系统临时文件数据,第一个chunk尺寸为50M,偏移量为200M;
*tmpdbs必须在online初始化之前建立;
建立命令如下:
$onspaces -c -d workdbs -p /informixdbs1 -o 100000 -s 100000;
$onspaces -c -d tmpdbs -p /informixdbs1 -o 200000 -s 50000;

4、Informix Online日志管理
4.1、数据库日志方式:

无日志方式(对应非事物性应用)
无缓冲区日志方式
带缓冲区日志方式
符合ANSI标准日志方式
针对保险业务特点,INFORMIX建议使用无缓冲区日志方式建立数据库,以保证机器崩溃时,交易事务不会丢失,与带缓冲区日志方式相比,数据库并行处理速度慢。
可使用ontape命令修改数据库日志方式
用ontape打开事务日志:
$ontape -s -U stores; 打开数据库stores日志,日志方式为无缓冲区日志;
用ontape结束日志:
$ontape -N lifeins; 将数据库lifeins改为无日志方式。

4.2、物理日志的管理

物理日志保存数据被修改前的映象。物理日志的位置和大小可以改变。使用onparams命令改变物理日志的位置和大小,在Online进入静态方式后执行:
$ onparams -p -s size -d dbspace -y
其中 -p: 表示物理日志
-s: 新的尺寸,后跟以K字节为单位的物理日志的大小
-d: 说明存放物理日志的dbspace名字
-y: 对所有的提问以“Yes”回答
注意:分配给物理日志的空间必须是连续的,因此,改变之前要确认dbspace有足够的空间来存放物理日志。

4.3、逻辑日志的管理

逻辑日志保存数据在修改后的映象,逻辑日志空间的尺寸为逻辑日志文件尺寸与逻辑日志文件个数的乘积。Online初始化后,已有逻辑日志文件的尺寸不可修改,要改变逻辑日志空间大小,只能修改逻辑日志文件个数,新增加的逻辑日志文件尺寸可以设为新的值,逻辑日志文件个数不得少于3个。
(1)、 用onparams 增加逻辑日志文件
$ onparams -a -d rootdbs
新增加的逻辑文件状态是A(A表示新增加的意思)。必须建立rootdbs的0级备份后,新增加的逻辑日志文件才可使用。
(2)、 增加一个具有新的尺寸的逻辑日志文件
$onparams -a -d rootdbs -s新的日志尺寸
(3)、 用onparams取消一个逻辑日志文件
$onparams -d -1 logid
注意: 。取消一个逻辑日志文件之前,必须做rootdbs的0级备份
$ ontape -s.; 该命令可做0级备份
* 只有状态为F(Free)或A(Added)的逻辑日志文件才可被取消
* 必须知道想要取消的逻辑日志的logid号
$ onstat -1; 该命令可查看逻辑日志文件状态及log id号

5、Informix Online数据库备份及恢复

备份内容及目的:
数据备份:备份数据库某个时刻的数据状态,当系统出现意外时用来恢复系统;
逻辑日志备份:逻辑日志文件写满后,必须备份,才可被清空,继续使用。如果所有的逻辑日志文件都被写满,则会引起系统崩溃。另外,逻辑日志记录了上一次数据备份后数据库的改变,因此,逻辑日志备份也用于当系统出现意外时用来恢复系统。

5.1、 数据备份:

(1) Online提供0 级,1级,2级增量备份;
0级:备份整个数据库系统;
1级:备份从0级备份以后发生变化的数据;
2级:备份从1级备份以后发生变化的数据;
(2) 使用ontape命令备份数据
$ontape –s
执行该命令,系统会提示输入0,1,2级备份级别
(3) 在整个系统正式运行之前,做一次0级备份,在每天业务系统结束工作后应做数据备份。如果数据量不大,可每天做0级备份。
(4) 管理好备份磁带,做好标记,如日期、时间、备份级别、所含逻辑日志号码

5.2、 逻辑日志文件备份

(1) 定时备份逻辑日志文件
定时做逻辑日志文件备份,系统只将已写满的逻辑日志文件备份到磁带上,然后清空,并释放这些日志文件。做定时备份一定要在所有逻辑日志文件被写满之前进行。所以,如果采用定时备份,要注意观察逻辑日志使用状况。另外,如果经常有长事务发生,应避免使用定时备份,采用连续备份比较安全。
命令: ontape -a
(2) 连续备份逻辑日志文件
连续备份即逻辑日志文件写满一个,就备份一个,然后该日志文件被消空、释放。因此,要做连续备份,必须保证磁带机中有磁带。连续备份需占用一个屏幕或终端显示信息。当磁带满时,系统会提示换带。
命令: ontape -c
Informix建议使用连续备份,但连续备份将一直占用磁带机,如果系统有二个磁带机,可分别用作数据备份及逻辑日志备份,如果系统只有一个磁带机,会与数据备份发生冲突,可按下表方式进行切换:
时 间 操 作
每日业务开始及进行中保证磁带机中有磁带,并且有一个屏幕或终端在运行:ontape -c
每日业务结束前 1)停止ontape -c,记录磁带中保存的逻辑日志的号码
2)换磁带
3)运行ontape -s,(在业务量不大时建议使用0级备份)运行结束后
在磁带上标注日期,时间,备份级别,所含逻辑日志号码
4)换磁带
5)运行ontape -c

5.3、系统恢复

当系统出现错误,或者你想把系统恢复到某一时间点的数据时,你必须利用数据备份带和逻辑日志备份来恢复系统。
数据备份将系统恢复到做数据备份的时间点数据状态,逻辑日志备份能将系统恢复到数据备份时间点以后的数据状态。
命令:ontape -r
敲入该命令后,你可根据系统提示,依次恢复最近的0、1、2级数据备份带及数据备份带之后的逻辑日志带。

6、系统诊断

online.log文件
数据库事务日志信息记录在$INFORMIXDIR/online.log文件中,平时应经常查看online.log文件信息,检查数据库有无异常。当数据库出错时查看online.log文件可知道数据库系统出错原因及处理建议。online.log非常有用,应很好地维护,定期清空,以防止文件过大难以查看。
finderr命令
当数据库出错时, 一般带有错误号,利用finderr命令可以查出数据库系统出错原因及处理建议提示。

发表回复