服务器 频道

informix使用建议

  【IT168 服务器学院】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

0
相关文章