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 |