Informix Dynamic Server维护手册

版本信息

Version

Date

Author

Remark

V0.5

2004-7-1

HenryCheung

Finished Chapter 1- Chapter 4

V0.6

2004-7-22

Henry

Modify Chapter1

Add new content into Chapter3, Chaper4

V1.0

2004-7-29

Henry Zhang

Modify Chapter3Chapter4

Rename

V1.1

2004-8-18

Henry Zhang

Add Chapter5

Rename

 


文档说明

本手册由Henry Cheung参考IBM Informix红皮书,以及internetInformix相关资源(详见附录A参考资料),结合个人经验编写。有相关Informix的技术交流欢迎通过zhangjij@cn.ibm.com和作者联系。

版权所有© HenryCheung 保留所有权利。


onstat工具

1.1 监控虚拟处理器和线程

onstat –g ath

显示有关线程和处理器类的信息

 

onstat –g glo

显出当前每个处理器的信息以及有关每个处理器类的累积的统计信息

 

onstat –g ioq

使用onstat –g ioq可以确定你是否要分配附加的AIO虚拟处理器。监视AIO vpgdf队列的长度,队列一贯短时表示对磁盘设备的处理速度与发生请求的速度一样快。如果gdf队列持续很长,考虑增加AIO vp的数目。

 

onstat –g wai

显示等待状态的线程

 

onstat –g act

显示活动状态的现场

 

onstat –g rea

监视就绪队列中的线程

 

onstat –g sle

显示睡眠状态的线程

1.2 操作系统进程与数据库session的关系

1)        使用操作系统命令(例如topas)查看最繁忙的oninit进程,记录它的pid

2)        onstat –g glo查看vp class,看相应进程里运行的是那个vp(用pid去匹配)。确定瓶颈是在那一类vp上(比如是在cpu vp上还是在aio vp上)。记录vpclass

3)        onstat –g act(或onstat –g ath)查看相应vp里运行的是那个线程(用vp class去匹配),记录它的tidrstcb

4)        onstat –g ses ses_id检查session信息(用tidrstcb去匹配)

下面的shell用于获得所有session信息

!/usr/bin/ksh

###############################################################################

#

      Module:         ses_all.sh

#       Author:         Henry Cheung

#       Description:    Get all sessiong information

#       History

#       Date        Name               Description.................

#       07/30/2004  Henry Cheung       Start Program

#

###############################################################################

 

onstat -g ses | grep -v IBM |grep -v session |grep -v id | awk '{print $1}' | while read SES_ID

do

onstat -g ses $SES_ID

done

 

1.3 监控共享内存

onstat –o

捕获共享内存的静态快照用于今后的分析和比较

 

onstat –g seg

显示每个共享内存段的信息。一般用于检查有几个虚拟内存段。如果虚拟内存段过多,考虑调整SHMVIRSIZE,和SHMADD参数。

 

onstat –s

获取锁存器的信息

 

onstat –p

显示数据库活动的统计信息。比如cached的读写命中率。如果读写命中率较低,考虑调整BUFFERS参数。ovuserthread-用户尝试超过用户最大线程最大的次数,ovbuff数据库服务器无法找到共享内存缓冲区的次数,

1.4 监视磁盘使用

onstat -d

检查数据库dbspacechunk使用情况。配合topas等系统命令,监控是否某个物理硬盘出现I/O瓶颈。

 

onstat –g iof

显示每个块的读取、写入的次数

1.5 其他

方法:onstat

目的:检查数据库服务器运行了多长时间,总共占用了多少内存。

 

方法:onstat –c  oncheck –pr

目的:检查数据库服务器当前使用的配置文件

 

方法:onstat –g env

目的:检查数据库服务器当前使用的环境变量

 

onstat –l

检查逻辑日志情况。

 

onstat –mvi online.log

检查数据库日志,包括检查点完成时间,是否有异常等。

 

onstat –g ses (session id), onstat –g sql

检查session状况

 

方法:onstat –u

目的:显示库用户活动信息

 

方法:onstat –x

目的:显示数据库服务器上的事务信息

oncheck工具

方法:oncheck -cr

目的:检查保留页

 

方法:oncheck –ce

目的:检查统空间使用情况

 

方法:oncheck –cc database

目的:检查应用数据库的系统表

 

方法:oncheck –ci, oncheck -cI

目的:检查数据库的索引情况,注意此命令会影响生产系统且耗时较长,应在适当的时候检查。

 

方法:oncheck –cd, oncheck –cD

目的:检查数据库的数据情况,,注意此命令会影响生产系统且耗时较长,应在适当的时候检查。

使用SMI

3.1 dbspace使用情况

--FileName: dbspaces.sql

--dbspace使用情况:输入dbspace name, allocated, free, percent of used

unload to dbs.txt delimiter " "

SELECT name[1,15] dbspace, SUM(chksize) allocated, SUM(nfree) free,

ROUND(((SUM(chksize) - SUM(nfree))/SUM(chksize))*100) pcused

FROM sysmaster:sysdbspaces d, sysmaster:syschunks c

WHERE d.dbsnum = c.dbsnum

GROUP BY 1

ORDER BY 4 DESC

及时监控dbspace的使用情况,以便分配新的空间给数据库使用

3.2 dbspace I/O

--FileName: dbs_io.sql

--dbspacechunk I/O: dbspace name, path, disk reads, disk writes

UNLOAD TO dbs_io.txt DELIMITER " "

SELECT first 10 d.name, fname path_name, SUM(pagesread) diskreads, SUM(pageswritten) diskwrites

FROM sysmaster:syschkio c, sysmaster:syschunks k, sysmaster:sysdbspaces d

WHERE d.dbsnum = k.dbsnum

AND k.chknum = c.chunknum

GROUP BY 1, 2

ORDER BY 3 DESC

监视是否存在某个dbspace I/O较高的情况,如果有就要考虑更为合理的数据分布和硬盘划分。

3.3 统计数据库占用的空间

--FileName: database_size.sql

--统计数据库占用的空间:dbspace, database_name, size

SELECT dbsname[1,15] database_name, SUM(pe_size) size

FROM sysmaster:sysptnext,

OUTER sysmaster:systabnames

WHERE pe_partnum = partnum

GROUP BY 1

ORDER BY 2 DESC

3.4 表扩展块情况

--FileName: extents.sql

--获取系统中extents最多的表的表名,所在的数据库名,extents的数量

--sysextents9.2版本和9.4版本的结构有不同,但不影响本sql执行

UNLOAD TO extents.txt DELIMITER " "

SELECT FIRST 20 t.dbsname, t.tabname, count(*)

FROM sysmaster:systabnames t, sysmaster:sysextents e

WHERE t.dbsname = e.dbsname

AND t.tabname = e.tabname

AND t.tabname[1,3] != "sys"

GROUP BY 1,2

ORDER BY 3 DESC

如果发现表的extents数量过多,就要考虑调整extents的大小,并且重建表。

3.5 I/O

--FileName: tab_io.sql

--table I/P: dbsname, tabname, disk reads, disk writes, disk io sum

UNLOAD TO tab_io.txt DELIMITER " "

SELECT first 5 dbsname, tabname, (isreads + pagreads) diskreads, (iswrites + pagwrites) diskwrites,

(isreads + pagreads + iswrites + pagwrites) disk_io

FROM sysmaster:sysptprof

WHERE tabname[1,3] != "sys"

ORDER BY 5 DESC

监视是否存在某张表I/O较高的情况,如果有就要考虑更为合理的数据分布和硬盘划分。

3.6 表空间的使用情况

--FileName: tab_space.sql

--表空间的使用情况: table name, dbspace, allocated_space, used_space, free_space

--针对每个应用库

UNLOAD TO tab_used.txt DELIMITER " "

SELECT FIRST 10 t.tabname[1,20] table_name,

      Cast(dbinfo( "DBSPACE" , t.partnum ) as char(10)) dbspace ,

      p.nptotal  allocated_space,

      p.npused used_space,

      (p.nptotal - p.npused) free_space,

      ROUND((p.npused/p.nptotal)*100) percent_used

FROM sysmaster:systabnames t, APPDB:systables a, sysmaster:sysptnhdr p

WHERE a.partnum = p.partnum

AND   a.partnum = t.partnum

AND   tabid > 99

GROUP BY 1,2,3,4,5

ORDER BY 3 DESC

如果表空间分配的较多而使用的较少,就要考虑重建表。

3.7 索引层数

--FileName: idx_lvl.sql

--索引层: table name, index name, levels

--应用库

SELECT FIRST 5 t.tabname, i.idxname, i.levels

FROM APPDB:systables t, APPDB:sysindexes i

WHERE t.tabid = i.tabid

AND t.tabname[1,3] != "sys"

ORDER BY 3 DESC

当索引层数超过4层就要考虑是否需要重建索引。

3.8 索引唯一性

--FileName: idx_unq.sql

--索引唯一性: table name, index name, table rows, index unique, percent of unique

--应用库

--i.nunique/t.nrows有可能会除零,

UNLOAD TO idx_unq.txt DELIMITER " "

SELECT FIRST 10 t.tabname, i.idxname, t.nrows, i.nunique

FROM APPDB:systables t, APPDB:sysindexes i

WHERE t.tabid =i.tabid

AND t.tabid > 99

ORDER BY  3 DESC

 

{

SELECT FIRST 10 t.tabname, i.idxname, t.nrows, i.nunique, (i.nunique/t.nrows)*100 pcniq

FROM APPDB:systables t, APPDB:sysindexes i

WHERE t.tabid =i.tabid

AND t.tabid > 99

ORDER BY  3 DESC, 5 DESC

}

索引唯一性的百分率越高,索引的唯一性就越高,性能就越好。为了避免因索引重复程度很高而引起的性能瓶颈,您可以使用复合索引来替换原来的索引,复合索引结合了重复程度很高的列与唯一性比较高的列。

3.9 顺序扫描

--FileName: seq_scans.sql

--顺序扫描: database name, table name, number of rows, total sequence scans

--应用库

UNLOAD TO seq_scans.txt DELIMITER " "

SELECT FIRST 10 p.dbsname, p.tabname,  t.nrows, sum(p.seqscans) tot_seqscans

FROM sysmaster:sysptprof p,  systables t

WHERE p.dbsname NOT LIKE "sys%"

AND p.dbsname = APPDB

AND p.tabname = t.tabname

AND t.tabname NOT LIKE "sys%"

GROUP BY 1,2,3

ORDER BY 3 DESC,4 DESC

如果一个具有几千甚至几百万行大表的顺序扫描数很高,那么您可能需要考虑向该表添加一些索引,或者考虑使用程序伪指令来强制内部查询优化器为访问该表中的数据选择索引而不是顺序扫描。

3.10 获取session信息

可以从syssespro(各用户操作计数)syssesions(对每个已连接用户的描述)表中获取sessions信息。

--FileName: sessions.sql

--sessions信息: session id, user name, host name, access, locks, sequence scans, total sorts, disk sorts, percent of memory sorts

SELECT s.sid, s.username, s.hostname,

(isreads+iswrites+bufreads+bufwrites+pagreads+pagwrites) access,

locksheld, seqscans, total_sorts, dsksorts,

((total_sorts - dsksorts)/total_sorts)*100 pct_memsorts

FROM sysmaster:syssessions s, sysmaster:syssesprof f

WHERE s.sid=f.sid

ORDER BY 4

如果一个session有过多的顺序扫描,或占用过多的锁资源,或使用了较多的disk sorts就需要关注这个session

3.11 sessions持有lock的情况

--FileName: lock.sql

--sessions持有lock的情况: sid, username, hostname, database name, table name, lock type

SELECT owner, username, hostname, dbsname, tabname, type

FROM sysmaster:syssessions s, sysmaster:syslocks l

WHERE sid  = owner

AND tabname NOT LIKE "sys%"

如果在锁使用方面存在某些冲突,例如某个用户需要对已被别的用户锁定的表进行专有访问,那么您可以方便地确定该锁的所有者,并根据用户的优先级发出 onmode -z sid 命令来杀死会话,然后释放该锁;sid 这个编号是从上面输出中的 owner 字段中获取的;请注意,只有用户“Informix”可以执行该命令。

3.12 锁信息

--锁信息:数据库名,表名,该表占有互斥锁的个数

--FileName: lock_count.sql

--锁信息:数据库名,表名,该表占有互斥锁的个数

SELECT FIRST 10 dbsname, tabname, COUNT(*)

FROM syslocks

WHERE type LIKE "%X%"

GROUP BY 1, 2

ORDER BY 3

性能瓶颈时应急方法

4.1 收集系统运行信息

收集全面的系统运行信息,以便今后分析问题所在。使用onstat –aonstat –g all,并保留输出信息到文件中。保留online.log。如果数据库宕机有core文件生成,请保留core文件。

4.2 数据库宕机

重启数据库保证关键业务运行。保留online.logcore文件。查看online.logcore文件,初步判断宕机原因,并于IMB技术支持联系。如果重启失败,考虑切换到备份机。

4.3 系统运行突然变慢,系统资源被占用过多

4.3.1    检查系统资源

首先用topasnmonsar vmstatiostat等命令检查CPU,内存、硬盘资源的使用情况。

topas

Topas Monitor for host:    S1_C_HZ_SHUJUKU      EVENTS/QUEUES    FILE/TTY

Tue Jul 27 13:01:26 2004   Interval:  2         Cswitch    1907  Readch     2750

                                               Syscall    7513  Writech     581

Kernel    2.2   |#                           |  Reads        21  Rawin         0

User     62.0   |#################           |  Writes        8  Ttyout      238

Wait      0.0   |                            |  Forks         0  Igets         0

Idle     35.6   |##########                  |  Execs         0  Namei         7

                                               Runqueue    3.7  Dirblk        0

Interf   KBPS   I-Pack  O-Pack   KB-In  KB-Out  Waitqueue   1.0

en1      628.9   880.4  1057.9   111.4   517.5

en2        0.2     1.9     0.9     0.1     0.1  PAGING           MEMORY

                                               Faults        0  Real,MB    4095

Disk    Busy%     KBPS     TPS KB-Read KB-Writ  Steals        0  % Comp     84.5

hdisk3   93.4   3981.8   234.9  3571.9   409.9  PgspIn        0  % Noncomp  15.6

hdisk2   78.9   2695.8   269.4  2145.9   549.9  PgspOut       0  % Client    0.5

hdisk22  71.4   1317.8   104.4   677.9   639.9  PageIn        0

hdisk4   59.9   3125.8   129.9   485.9  2639.9  PageOut       0  PAGING SPACE

hdisk10  47.4   5095.9   153.4  5095.9     0.0  Sios          0  Size,MB    5120

                                                                % Used     56.6

oninit   (35894) 17.1% PgSp: 1.2mb informix                      % Free     43.3

oninit   (21698) 11.7% PgSp: 1.2mb informix

oninit   (38944) 10.7% PgSp: 1.2mb informix

oninit   (42688) 10.7% PgSp: 1.2mb informix        Press "h" for help screen.

oninit   (15774)  7.5% PgSp: 1.2mb informix        Press "q" to quit program.

 1

上图可以看出CPU idle 35.6%hdisk3最繁忙93.4%,最繁忙的oninit进程和其进程号。

通过这一步的检查确定是否有CPU、内存或磁盘I/O操作的异常。如果CPU突然繁忙,就要检查是否正在运行某个特殊的应用程序,或者在执行一些大批量处理的业务。如果确定某个应用程序会占用过多的系统资源考虑中止该应用程序。

4.3.2    检查数据库

使用”1 onstat工具提到的检查虚拟处理器、共享内存、磁盘使用的方法检查。

使用”1.2 操作系统进程与数据库session的关系中提到的方法检查session情况。

1)        使用操作系统命令(例如topas)查看最繁忙的oninit进程,记录它的pid

参见图1红色部分

2)        onstat –g glo查看vp class,看相应进程里运行的是那个vp(用pid去匹配)。确定瓶颈是在那一类vp上(比如是在cpu vp上还是在aio vp上)。记录vpclass

Informix Dynamic Server 2000 Version 9.21.FC7     -- On-Line -- Up 3 days 20:05s

 

MT global info:

sessions threads  vps      lngspins

72       114      12       20536081

 

         sched calls     thread switches yield 0   yield n   yield forever

total:    1331551216      803593811       604838347 1639523   333477762

per sec:  518             513             43        3         225

 

Virtual processor summary:

class       vps       usercpu   syscpu    total

cpu         6         1096903.92  27302.29  1124206.21

aio         2         7.85      13.40     21.25

lio         1         3.52      5.91      9.43

pio         1         3.20      6.07      9.27

adm         1         10.40     17.29     27.69

msc         1         314.72    92.50     407.22

total       12        1097243.61  27437.46  1124681.07

 

Individual virtual processors:

vp    pid       class       usercpu   syscpu    total

1     32440     cpu         249667.07  7407.37   257074.44

2     32914     adm         10.40     17.29     27.69

3     30830     cpu         192338.19  7340.19   199678.38

4     23202     cpu         167720.65  3326.55   171047.20

5     34752     cpu         165780.54  3250.53   169031.07

6     32102     cpu         162890.54  3086.34   165976.88

7     26454     cpu         158506.93  2891.31   161398.24

8     35392     lio         3.52      5.91      9.43

9     31568     pio         3.20      6.07      9.27

10    15788     aio         4.53      6.80      11.33

11    30090     msc         314.72    92.50     407.22

12    27966     aio         3.32      6.60      9.92

                tot         1097243.61  27437.46  1124681.07

 2

3)        onstat –g act(或onstat –g ath)查看相应vp里运行的是那个线程(用vp class去匹配),记录它的tidrstcb

 

Informix Dynamic Server 2000 Version 9.21.FC7     -- On-Line -- Up 3 days 20:08:

11 -- 3493088 Kbytes

 

Running threads:

tid     tcb              rstcb            prty status                vp-class

   name

35      7000000a22b4028  0                4    running                 3cpu

   kaio

52      7000000a2710028  0                4    running                 4cpu

   kaio

56      7000000a2802028  0                4    running                 6cpu

   kaio

382844  7000000d81cee18  7000000a16e14b0  2    running                 5cpu

   sqlexec

386225  7000000c8730190  7000000a16c7650  2    running                 1cpu

   sqlexec

 3

4)        onstat –g ses ses_id检查session信息(用tidrstcb去匹配),可以用shell将所有的session详细信息都写入到文件中,再在文件中搜索tidrstcb

Informix Dynamic Server 2000 Version 9.21.FC7     -- On-Line -- Up 3 days 20:11:

29 -- 3493088 Kbytes

 

session                                      #RSAM    total      used

id       user     tty      pid      hostname threads  memory     memory

377298   cics     -        65720    S1SDYY   1        3284992    3156424

 

tid      name     rstcb            flags    curstk   status

382844   sqlexec  7000000a16e14b0  Y--P---  2816     7000000a16e14b0cond wait(ne

tnorm)

 

Memory pools    count 1

name         class addr             totalsize  freesize   #allocfrag #freefrag

377298       V     7000000d8133040  3284992    128568     4927       66

 

name           free       used           name           free       used

overhead       0          3248           mtmisc         0          1496

scb            0          200            opentable      0          423176

filetable      0          40432          ru             0          328

blobio         0          9192           log            0          4216

temprec        0          10104          keys           0          24912

ralloc         0          2211752        gentcb         0          1776

ostcb          0          3448           sort           0          104

sqscb          0          91784          sql            0          72

rdahead        0          1120           hashfiletab    0          552

osenv          0          2408           buft_buffer    0          139128

sqtcb          0          33992          fragman        0          151496

shmblklist     0          1488

 

Sess  SQL            Current            Iso Lock       SQL  ISAM F.E.

Id    Stmt type      Database           Lvl Mode       ERR  ERR  Vers

377298 -              sdboss             DR  Wait 10    0    0    9.03

 

Last parsed SQL statement :

  select vc_prodname from yx_pp_prod where int_prodid = ?

 

7168 byte(s) of memory is allocated from the sscpool

4

 

如果监控到某个session占用系统资源过多,决定要中止该session时,使用onstat –g ses (session id)查看client端的pid,首先考虑中止相应的client应用程序,如果失败使用kill命令中止client端进程,如果还失败使用onmode –z (session id)中止该session

Informix Dynamic Server 2000 Version 9.21.FC7     -- On-Line -- Up 3 days 20:09:

50 -- 3493088 Kbytes

 

session                                      #RSAM    total      used

id       user     tty      pid      hostname threads  memory     memory

380767   informix -        0        -        0        12288      11240

380766   billadm  -        51296    s2sd_svc 1        106496     98432

380764   billadm  -        49068    s2sd_svc 1        102400     96920

380738   billadm  -        58844    s2sd_svc 1        143360     85576

380714   billadm  -        57098    s2sd_svc 1        151552     84312

380661   billadm  -        56326    s2sd_svc 1        184320     146304

380505   cics     -        58196    S2SDYY   1        126976     91560

380503   cics     -        81138    S2SDYY   1        184320     182904

380502   cics     -        31242    S2SDYY   1        2228224    2149256

380500   cics     -        50182    S2SDYY   1        1654784    1644072

380499   cics     -        79292    S2SDYY   1        671744     634600

380399   cics     -        56446    S1SDYY   1        2260992    2243024

380343   cics     -        46380    S1SDYY   1        118784     80520

380326   cics     -        65994    S1SDYY   1        2342912    2285824

380279   cics     -        21972    S2SDYY   1        589824     549560

380276   cics     -        79814    S2SDYY   1        905216     876624

380275   cics     -        25926    S2SDYY   1        667648     641392

380274   cics     -        48294    S2SDYY   1        2203648    2176776

5

4.4 定期检查数据库

根据“3 使用SMI”中提供的方法,定期执行相关的SQL语句检查数据库。下列原因都会造成系统运行效率低:

r        dbspacechunkI/O不均匀。考虑重新分布磁盘空间。

r        表的扩展块过多。考虑调整extent size,并重建表。

r        表空间分配很大,但空闲的较多。考虑重建表。

r        索引层数过多:大于4层,或表的记录数不多但索引层数大于3层。考虑重建索引。

r        索引的唯一性差。考虑重新设计索引。

r        表的顺序扫描过多。检查应用,考虑重新设计索引


性能优化

对于本章的操作,设计到数据变更的建议操作之前都做0级备份,用于发生异常情况时恢复。要修改onconfig文件的,建议备份旧文件。

5.1 表扩展块过多

如果通过“3.4表扩展块情况”检查出表扩展块较多,则需要重新计算合理的extent size,并重建表。具体操作步骤如下:

5.1.1    方式一 unloadload

1.         对数据库做0级备份,用于发生异常情况时恢复

2.         编写新表建表文件

执行

dbschema –d database –t table_name –ss > cre_table.sql

将建表的SQL输出到cre_table.sql文件中,做如下修改:

r        设定合理的extent size, next extent size,建议以一张表只有一个extent

3.         记录对旧表信息,用于检查新、旧表的一致性

通过SELECT COUNT(*),或对某个字段做SUM,或抽查某些记录来保证新、旧表记录的一致性

4.         unload备份旧表数据

UNLOAD TO FILE SELECT * FROM old_tale

5.         删除旧表

DROP TABLE old_table

6.         cre_table.sql文件创建新表

7.         load导入数据到新表

LOAD FROM file INSERT INTO new_table

8.         检查新、旧表的一致性

通过SELECT COUNT(*),或对某个字段做SUM,或抽查某些记录来保证新、旧表记录的一致性

5.1.2    方式二 从旧表查询插入到新表

1.         对数据库做0级备份,用于发生异常情况时恢复

2.         将旧表该名

RENAME TABLE new_table TO old_table

3.         编写新表建表文件

执行

dbschema –d database –t table_name –ss > cre_table.sql

将建表的SQL输出到cre_table.sql文件中,做如下修改:

r        为提高insert数据的速度,将表修改为RAW方式。RAW方式的表为非日志记录,不能有索引或参考约束但可以对其进行更新,使用此类型表来快速装入数据。

ALTER TABLE new_table TYPE (RAW)

r        建表时不创建主键和索引

r        设定合理的extent size, next extent size,建议以一张表只有一个extent

r        为减少插入数据时锁的数量,可以将表设为页锁,插入数据后再修改回设计的值。

ALTER TABLE new_talbe MODIFY LOCK MODE (PAGE)

4.         导入数据

INSERT INTO new_table SELECT * FROM old_table

注意检查数据库空间是否足够

5.         将新表改为STANDARD方式

ALTER TABLE new_table TYPE (STANDARD)

6.         创建主键、索引

SET PDQPRIORITY 60

CREATE INDEX index_name ON table_name(column)

SET PDQPRIORITY 0

7.         检查新、旧表的一致性

通过SELECT COUNT(*),或对某个字段做SUM,或抽查某些记录来保证新、旧表记录的一致性

8.         unload备份旧表数据

UNLOAD TO FILE SELECT * FROM old_table

9.         删除旧表

DROP TABLE old_table

5.2 索引层数过多

如果通过“3.5索引层数”检查出索引层数过多,则需要重新创建表。具体操作步骤如下:

先删除旧索引

DROP INDEX index_name

再创建新索引

CREATE INDEX index_name ON table_name(column)

5.3 索引唯一性低

如果通过“3.8索引唯一性”检查出索引层唯一性较低,则需要检查应用,使用复合索引来替换原来的索引,复合索引结合了重复程度很高的列与唯一性比较高的列。重新创建表的步骤参见“5.2索引层数过多”。

5.4 表存储空间分布不合理

如果应为表存储空间分布不合理导致某块硬盘I/O较高,造成系统瓶颈需要重新对表空间进行分配。

如果要重建表的步骤可以参考“5.1表扩展块过多”,存储分配的SQL参见《IBM Informix Guide to SQL- Syntax》中“CREATE TABLE”存储选项部分。

如果不重建表,修改存储分配的SQL参见《IBM Informix Guide to SQL- Syntax》中“ALTER FRAGMENT”部分。

5.5 dbspace I/O 较高

如果通过“3.2 dbspace I/O”检查出某个dbspace I/O过高,则需要检查dbspace的划分是否合理,如果需要重新划分表在dbspace中的存储参见“5.4表存储空间分布不合理”

5.6 table I/O较高

如果通过“3.5  I/O”检查出某个表I/O过高,则需要检查应用系统设计上是否该表就是需要访问频繁的表,如果不是则需要检查应用程序。

5.7 虚拟段过多

共享内存的虚拟段包括:共享内存内部表,大缓冲区,会话区,线程区,数据分布高速缓存,字典高速缓存,SPL例程高速缓存,SQL例程高速缓存,排序池,全局池。

如果通过onstat –g seg检查发现虚拟段多于3个,建议修改onconfig文件中SHMVIRTSIZESHMADD参数,最好保证虚拟段为1-2个。修改参数后需要重新Informix

如果在检查了应用后,发现对虚拟段的需求仍然很大,建议增加物理内存或将部分应用移出该informix instance

5.8 dbspace已使用超过了90%

如果通过“3.1 dbspace使用情况”检查发现dbspace使用超过了90%,就需要往该dbspace中添加chunk。使用命令

onspaces -a <spacename> -p <path> -o <offset> -s <size>

5.9 表空间分配多,但使用的较少

如果通过“3.6 表空间的使用情况”检查发现表空间分配多,但使用的较少,建议重建该表。步骤参见“5.1表扩展块过多”

5.10 修改tempdbs

可以将原来12tempdbs调整到4个,原来数据库空间平均划分。

使用

onsapces –d <spacename> [-p <path> -o <offset>] [-f] [-y]

删除原来的tempdbs

使用

onspaces -c { -d <DBspace> [-t] -p <path> -o <offset> -s <size> }

添加新的tempdbs

并修改onconfig文件中DBSPACETEMP参数,需要重启Informix数据库


附录参考资料

IBM Informix Dynamic Server Administrator's Guide  Version(G152-0568-00)

IBM Informix Dynamic Server Administrator's Guide  Version(G152-0568-00)

《监控 Informix Dynamic Server 以获取更高性能》 Jianing Fan  Motorola Corporation

本日志由 flyinweb 于 2010-09-20 11:07:27 发表,目前已经被浏览 4681 次,评论 0 次;

作者添加了以下标签: Informix Dynamic Server Maintenance ManualIDS维护手册

引用通告:http://www.517sou.net/Article/525/Trackback.ashx

评论订阅:http://www.517sou.net/Article/525/Feeds.ashx

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)