Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310620
  • 博文数量: 94
  • 博客积分: 2220
  • 博客等级: 大尉
  • 技术积分: 975
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-17 21:17
文章分类

全部博文(94)

文章存档

2011年(5)

2010年(11)

2009年(1)

2008年(2)

2006年(1)

2005年(65)

2004年(9)

我的朋友

分类: DB2/Informix

2005-07-08 12:30:58

:informix使用建议

作者:amiescort  发表于:2004-06-26 16:59:21

 

1 相关环境变量

游标的定义和优化

A. 优化使用游标B.

export OPTOFC=1  减少cursor的通信量

 

C. 自动释放游标D. 资源

SET AUTOFREE...ENABLED

export IFX_AUTOFREE=1

 

E. 优化fetch游标F.

set FET_BUF_SIZE = 32k

 

启动KAIO参数

export  KAIOON=1

需要重新启动数据库

 

启动PDQ参数

A. 环境变量:export PDQPRIORITY=80

B. SQL语句中设置:set PDQPRIORITY=80

C. 并行扫描线程数:export PSORT_NPROCS=0(缺省的3个)或要启动的个数,D. E. 设不F. 启动。

G. 启动 light scan方法:export  LIGHT_SCANS=force

H. ONCON FIG参数:

MAX_PDQPRIORITY

DS_MAX_QUERIES

DS_TOTAL_MEMORY

DS_MAX_SCANS

DBSPACETEMP

RA_PAGES

RA_THRESHOLD

G. 管理监控方法

$  onstat  -g  mgm

 

动态改变ONCONFIG中缺省设置方法

$  onmde  -M (DS_TOTAL_MEMORY) / -Q (DS_MAX_QUERIES) / -D (MAX_PDQPRIORITY) / -S (DS_MAX_SCANS)

 

启动SQL缓存方法

ONCONFIG参数

STMT_CACHE 0=disabled ; 1=Enabled, Session off ; 2=Enabled, Session on ;

STMT_CACHE_SIZE  缺省为72K或设置的大小

环境变量

ONCONFIGSTMT_CACHE > 0

export  STMT_CACHE0=disabled ; 1=enabled

SQL语句

set  STMT_CACHE  {ON / OFF}

动态onmode方法

$ onmode –e {ENABLE|ON|OFF|FLUSH}

 

管理方法

$ onstat  -g  cac stmt

调试方法

export STMT_CACHE_DEBUG={1|2}:/tmp/file.out

 

 

停止FUZZY Checkpoint方法

export  NOFUZZYCKPT=1

 

缺省是fuzzy checkpoint,但发以下命令产生全checkpoint

$ onmode  -ky

$ onmode  -c

$ ontape  /  onbar 备份或恢复

fast recovery full recovery

 

收集数据库故障分析方法

若数据库down,查看数据库日志,查找/tmp/af.xxx文件得到详细信息

 

若数据库没有出现任何详细的信息,则需要下次故障后通过以下方法收集信息:

A.  export  AFDEBUG=1  (at command line before starting engine -  oninit)

    This environment variable causes OnLine to hang rather than crash when an assertion failure error is detected.

  

 B.  When an assertion failure occurs, check the online log to

     determine what process is hanging.  At the time of an assertion failure, type onstat -m to view the log.

  

 C.  Once the online engine suspends, you can run several onstat commands against the instance:

             

               onstat -u

               onstat -g ath

               onstat -g sts

               onstat -g glo

               onstat -g stk thread id

               onstat -g ses session id

               onstat -g seg

               onstat -g mem

  

     These are all helpful in reviewing the shared memory at that instance in time.

  

 D.  In order to use a debugger against the process id, you can attach     manually using the following command:

  

     i.e.  sdb $INFORMIXDIR/bin/oninit PID

  

 E.  Below is a sample:

  

                   example $  export  AFDEBUG=1

                   example $  oninit

                      .........

                   example $  onstat -m           

                   07:20:18  checkpoint completed: duration 13 seconds

                   07:22:20  bsession.c, line 861, thread 2854, procid 4975,

                                   (destroy_session) mem pools not freed.

                   07:22:22  invoke_debugger:execlp error 2

                   07:22:22  execlp(,,,4975,0);

                   07:22:22  oninit pid 4975 can be attached to manually

  

                   machine:/sdb $INFORMIXDIR/bin/oninit PID

  

                   some debuggers:  (sdb, xdb, dbx, gdb)

  

 F.  The stack trace will tell what functions the oninit called before the assertion failure.

  

 G.  When you are done, bring down the engine with onmode -ky and unset     the AFDEBUG environment variable.  If that doesn't bring the engine down, you may need to issue a kill -9 on the master oninit process and run ipcs to ensure shared memory is erased.

  

数据库性能监控方法

2 主要工具 onstat oncheck SMI接口、onperf(x-window界面)sartopvmstatiostat

3 监控的主要内容包括以下部分:

l cpu(确定数据库的CPU资源配置是否足够)

 

参数:NUMCPUVPS

 

检查CPU VP资源是否足够的方法

$ onstat –i

onstat > r 1

onstat (1) > rea

查看是否有等待处理的线程

 

onstat(1) > act

查看数据库CPU VP正在处理的线程

 

$ onstat –g glo 可以看到oninit的进程情况

 

l 内存确定数据库内存的分配是否足够

 

参数BUFFERSSHMVIRTSIZELOCKSLRUS

 

查看数据库是否使用内存正常

$ onstat  -p

是否有ovbuff

 

$ onstat  -m

查看是否有动态增加的虚拟内存

查看数据库的内存分配情况

$ onstat  -g  seg

$ ipcs -m

 

查看连接的session内存分配情况

$ onstat  -g  ses

对于内存分配大的用户session,需要分析其原因

 

查看内存LRU管理情况

$ onstat  -R

 

l 磁盘的读写、数据表的分布情况(检查数据的分布是否合理,l 消除I/O瓶颈)

查看数据库chunk分布情况和使用空间是否足够

$ onstat  -d

 

查看数据库chunk的读写情况

$ onstat  -D

$ onstat  -g  iof

 

查看AIO的队列情况

$ onstat  -g  ioq

maxlen太长的情况需要调整NUMAIOS数据

 

查看tbspace的读写情况

$ onstat  -g  ppf

 

检查数据表在chunk分布的拓扑情况

$ oncheck  -pe

 

检查数据库表的详细情况,包括记录数、记录长度、碎片数据、索引层次等信息

$ oncheck  -pt  stores:customer

 

如以上得到数据显示表customer partition partnum1048891

$ oncheck  -pp  1048891  0 可以查看customer数据的分布情况

 

以下命令检查表数据或索引是否正常

$ oncheck  -cDI  database:table

 

l 网络的读写情况(检查数据库网络的配置是否正常有效)

 

参数:NETTYPEsqlhosts配置的方法

 

$ onstat  -g  ath

查看相关的poll监听线程是否启动

 

$ onstat  -g  ntd

查看接收和拒绝的次数

 

$ onstat  -g  ntu

查看用户启动的sqlexec线程读写的情况

 

$ netstat  -a

看连接监听的端口是否有效

 

l 检查用户SQL语句是否正常

 

$ onstat  -u 查看用户连接ID

 

$ onstat  -g  ses  id  查看用户的内存分配情况、用户启动的线程数、用户是否用到临时表空间

 

$ onstat  -g  sql  id  查看用户的SQL语句和执行结果是否有错误

 

$ onstat  -k 查看用户的使用锁情况

 

$ onstat  -x  查看用户的事物处理情况

 

$ onmoe  -z  id  杀掉不正常的用户session

 

相关的参数衡量指标

4 读写的命中率

$ onstat  –p

dskreads pagereads bufreads %cached dskwrits pagwrits bufwrits %cached

450       1083       1893      97.62    586      1217       8076      92.74

查看参数读的命中率98%以上,调整 BUFFERS

写的命中率85%以上,调整LRUS , LRU_MAX_DIRTY , LRUS_MIN_DIRTY , CKPTINTVL , PHYSLOG

 

5 内存LRU的管理

$ onstat  -R

$ onstat  -F

Fg Writes LRU Writes Chunk Writes

11          318          201

调整:

LRU_MAX_DIRTY

LRU_MIN_DIRTY

LRUS

控制在checkpoint时的写的数据页数

        (BUFFERS / LRUS) * LRU_MAX_DIRTY checkpoint时写的最大数据量

 

6 checkpoint的时间

$ onstat  -m

$ onstat  -g  iof

$ onstat  -D

调整写盘数据量(同2,调整LRU方法)

调整数据的分布情况,分布在不同的disk driver

 

7 物理日志和逻辑日志缓冲区的利用率

$ onstat  -l

Physical Logging

Buffer bufused bufsize numpages numwrits pages/io

P-1     0        16       265        21        12.62

phybegin physize phypos phyused #used

100107    1000     266    0         0.00

Logical Logging

Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io

L-2      0       16       6766     394       28        17.2       14.1

...

调整目标是将日志的buffer利用率调整为 (pages/io)/bufzise = %75的比例

调整参数 phybuff / logbuff ,比%75小,减小phybufflogbuff;比%75大,调大

 

8 预读的性能

$ onstat  -p

 

调整目标

(ixda-RA + idx-RA + da-RA) = RA-pgsused

 

调整参数:RA_PAGES RA_THRESHOLD

 

其他提高数据库性能的方法

9 使用常用表长驻内存

set table  table_name  memory_resident | no_resident ;

 

$ onstat  -P 查看

 

10 SQL语句进行词法预分析方法

 

set explain on ;

执行相应的SQL语句

 

检查当前目录下的sqexplain.out文件

分析词法优化器使用的路径是否合理

 

分析执行的效率方法

$ time dbaccess airgen_cm_db sel_cnt.sql

Database selected.

(sum)

1156215

1 row(s) retrieved.

Database closed.

real 0m0.12s

user 0m0.05s

sys 0m0.01s

 

11 表不12 带日志方法

将表的索引、以及constrain等条件全部删除后,执行以下SQL语句

alter  table  table_name  type (raw|standard)

 

13 使用Informix最快的数据转移工具HPL倒数据

$ onpladm 命令行方式定义数据库表的输出或输入关系

文档参考$INFORMIXDIR/release/en_us/0333/onpladm/index.html

 

$ onpladm  create  project  stores7  -d /tmp/stores7  -D stores7 建立所有的loadunload数据到onpload数据库中

 

$ onpladm run project stores7 –fu 将数据库stores7数据unload出来

$ onpladm run project stores7 –fl 将数据库stores7数据load

 

$ onpload  执行命令

 

14 update statistics的原则

以下情况后要运行update statistics :

à data is loaded into a table,

à updates significantly change the distribution of data values contained in a column,

à deletes or inserts change the number of rows contained in a table

à indexes on the table are added or altered.

 

执行原则:

1. Run UPDATE STATISTICS MEDIUM... DISTRIBUTIONS ONLY.

2. Run UPDATE STATISTICS HIGH for the first column in each index.

3. Run UPDATE STATISTICS HIGH for the first column that differentiates two similar indexes.

4. If necessary, run UPDATE STATISTICS HIGH for columns which do not head indexes, but are used in equality or inequality expressions.

5. Run UPDATE STATISTICS FOR PROCEDURE for each procedure.

 

ONCONFIG 参数DBSPACETEMP PDQRIORITY一起使用

 

15 检查备16 份磁带是否成功的工具

$ archecker -R -tvs

-b Direct XBSA access

-D Delete old files and EXIT

-d Delete old files

-F Retrieve list of pages off the archive

-P Read Performance - info only

-R Restart the checking

-s Print status message to the screen

-t Read the tape directly

-T Restart at a specific tape

-v Verbose

-V Version

阅读(1411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~