Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103554611
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-30 23:06:11

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或设置的大小
环境变量
在ONCONFIG中STMT_CACHE >; 0时
export  STMT_CACHE:0=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界面)、sar、top、vmstat、iostat
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        内存(确定数据库内存的分配是否足够)

参数:BUFFERS、SHMVIRTSIZE、LOCKS、LRUS

查看数据库是否使用内存正常:
$ 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 partnum为1048891
$ oncheck  -pp  1048891  0 可以查看customer数据的分布情况

以下命令检查表数据或索引是否正常
$ oncheck  -cDI  database:table

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

参数:NETTYPE和sqlhosts配置的方法

$ 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小,减小phybuff、logbuff;比%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 建立所有的load和unload数据到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

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