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

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-03 21:15:34

监控ONLINE系统后动情况的工具主要有以下三类: 
 系统监控接口(SMI) 
 tbstat 
 tbcheck 

一、 系统监控接口(SMI): 
  我们主要通过SQL命令操作online的内部数据库sysmaster中的内部表/结构,来获取有关的维护信息。Sysmaster是在online初次初始化时,系统自动创建的。它实际主要存储了一些数据结构,而不是真正的表。使用SMI有如下限制: 
 不能对SMI中的表加锁或使用隔离级别。 
 不允许使用insert,delete,update等语句(只读) 
 不能使用dbschema,dbexport等命令 
 使用select rowid语句将会产生不可预料的结果 
主要的SMI表有: 
sysdatabases:online中的数据库信息 
systabnames:某数据库中所有表的信息 
syslogs:逻辑日志信息 
sysdbspaces:数据库信息 
syschunks,syslocks等 
例1:显示处于脱机(offline)状态的chunk的序号和所在数据库空间 
Select chknum,dbsnum from syschunks where is_offline=1 or misline=! 
例二:显示满chunk的信息 
Select chknum,dbsnum from syschunks where nfree=0 
二、 TBSTAT 
 列出当前时刻的信息(实际也是读取SMI表) 
 不需要磁盘I/O 
 不需要锁等系统资源,因此不会影响系统性能 

用法: tbstat [-abcdklmpstuzBDFPRX] [-r seconds] [-o file] [infile] 

  -a   print all info (options: bcdklmpstu) 
  -b   print buffers(缓冲区) 
  -c   print configuration file(配置文件) 
  -d   print dbspaces and chunks(dbspace和chunk) 
  -k   print locks(锁) 
  -l   print logging(日志) 
  -m   print message log(消息日志) 
  -p   print profile(profile文件) 
  -s   print latches(门闸) 
  -t   print tblspaces(表空间) 
  -u   print users(用户) 
  -z   zero profile counts 
  -B   print all buffers 
  -D   print dbspaces and detailed chunk stats 
  -F   print page flushers(页刷新进程) 
  -P   print profile, including BIGreads 
  -R   print LRU queues(LRU队列) 
  -X   print entire list of sharers and waiters for buffers 
  -r   repeat options every n seconds (default: 5) 
  -o   put shared memory into specified file (default: tbstat.out) 
infile use infile to obtain shared memory information 

三、 几个常用的tbstat选项: 
 tbstat -m :显示消息日志的最后20行. 
消息日志的内容包括: 
1)、检查点信息 
2)、读写错误信息 
3)、ONLINE模式转换信息 
4)、长事务 
5)、日志文件满(LOG FILE FULL ) 
若想显示完整信息,可直接编译消息日志文件. 
 Tbstat -d:磁盘空间的使用情况,包括DBSPACE和CHUNK的信息 
例:RSAM Version 5.03.UC1  -- On-Line -- Up 09:45:41 -- 816 Kbytes 

Dbspaces 
address number  flags  fchunk  nchunks flags owner  name 
8040a244 1    1    1    1   N   informix rootdbs 
1 active, 8 total 

Chunks 
address chk/dbs offset  size   free   bpages  flags pathname 
80409d84 1  1  0  300000  231871      PO- /dev/rdata 
1 active, 8 total               
其中的FREE项,显示了该CHUNK的空闲空间大小(Kbytes). 
 Tbstat -l :日志文件情况 
Physical Logging 
Buffer bufused bufsize numpages numwrits pages/io 
 P-2 0    16    0    0    0.00 
   phybegin physize phypos  phyused %used 
   101782  15000  960   0    0.00 

Logical Logging 
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io 
 L-2 0    16    1    1    1  1.0    1.0 

address number  flags  uniqid  begin    size   used  %used 
8042de94 1    U---C-L 1    10521a    7500   630   8.40 
8042deb0 2    F------ 0    106f66    7500    0   0.00 
8042decc 3    F------ 0    108cb2    7500    0   0.00 
8042dee8 4    F------ 0    10a9fe    7500    0   0.00 
8042df04 5    F------ 0    10c74a    7500    0   0.00 
8042df20 6    F------ 0    10e496    7500    0   0.00 
                               
其中:%USED: 使用百分比 
FLAGS字段的含义: 
F: 空闲 B:已备份 C: 正在接收事物记录 
U: 正在使用 A: 新增日志 L: 包含最后一个检查点 
 Tbstat - u:ONLINE的用户情况 
Users 
address flags  pid   user   tty   wait  tout locks nreads  nwrites 
804019f4 ------D 329   root   console 0    0  0   179   2 
80401a64 ------D 0    root   console 0    0  0   0    0 
80401ad4 ------F 330   root       0    0  0   0    0 
3 active, 20 total 

Transactions 
address flags user   locks log begin isolation retrys coordinator 
804022b4 A---- 804019f4 0   0     NOTRANS  0 
804028d8 A---- 80401a64 0   0     NOTRANS  0 
2 active, 20 total   
其中:flages字段的含义: 
第一列:(S:等待mutex;Y:等待条件;L:等待锁;B:等待缓冲区; 
      C:等待检查点;X:长事务清理;G:等待长缓冲写;T:等待事务) 
第二列:(*:事务执行时,发生I/O错误) 
第三列:(A:正在备份;B:操作已被记录在日志中;P:分布处理已准备好;  
      C:正在提交;R:正在回滚) 
第四列:(P:会话的主线索) 
第五列:(R:在read rsam 调用中;X:进程在关键分区) 
第七列:(M:特殊监控;D:特殊线索;C:清理线索;F:特殊清页进程; 
       B:特殊B+树清页线索) 
 Tbstat -k :用户持有锁的情况 
锁按照粒度分为6种: 库锁、表锁、页锁、行锁、字节锁、键锁 
字节锁:更新包含有VARCHAR类型的行时,加在该行上的锁。 
键锁:用于索引树上的锁。一般在相应字节上加删除标志。 
这几种锁的识别如下: 
    TYPE  TBLSNUM  ROWID   SIZE  
库锁  HDR+X  1000002   205     0  
表锁       100000e   0      0 
页锁             100      0 
行锁             101  
字节锁  HDR+B               909 
键锁             很大的16进制数 
锁的生命期:1、不使用事务时,操作完成即会释放对应的锁; 
2、 若使用事务,锁将伴随整个事务。(即随这COMMIT WORK或ROLLBACK WORK而释放)   
(**锁的几种类型:共享锁(SHARE),排它锁(EXCLUSIVE),可升级锁**) 
 tbstat -p : 显示系统资源状况(是否充分) 
Profile 
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached 
181  199   358   49.44  7   8    2    0.00 

isamtot open start  read  write rewrite delete  commit  rollbk 
3   1   1   0   0   0   0    1    0 

ovtbls ovlock ovuser  ovbuff  usercpu syscpu  numckpts flushes 
0    0    0    0    0.00   0.00   2    239 

bufwaits lokwaits lockreqs deadlks dltouts lchwaits ckpwaits compress 
0    0    0    0    0    0    0    0  
OVTBLS:指示TBLSPACE值不够 ,TBLSPACES值应增大 
OVLOCK:锁溢出  LOCKS应增大 
OVUSER:用户表资源不够  USERS 
OVBUF:缓冲区资源不够   BUFFERS 
以上数字若持续增加,表明相应参数值应调整 
DEADLOCKS:检测到的死锁数 
DLTOUTS:网络超时死锁 
DEADLOCK_TIMEOUT:一般为60秒,若增大此数字,可以减少死锁数,但会增加响应时间,用户看来性能更差;若减少此数字,死锁数可能会增大,但会减少响应时间,在用户看来,响应时间变快了。 

四、 ONCHECK: 
 定位并修复数据与索引的不一致 
 检查磁盘上的数据结构 
 显示不同数据结构的报告 
 某些选项可能回在它所涉及的表上家一个共享锁 
用法: tbcheck [-clist] [-plist] [-qny] 
    [ { database[:[owner.]table] | TBLSpace number | Chunk number } 
      { rowid | page number } ] 

-c   - check(检查) 
  r  - reserved pages(保留页) 
  e  - TBLSpace extents and chunk extents 
  c  - database catalogs(目录) 
  i  - table indexes(表的索引) 
  I  - table indexes and rowids in index(表的索引和索引的rowid) 
  d  - TBLSpace data rows including bitmaps(表空间的数据行包括位图) 
  D  - TBLSpace data rows including bitmaps, remainder pages and blobs 
                     
-p   - print(显示) 
  r  - reserved pages (-cr) (保留页) 
  e  - extents report (-ce)(extent) 
  c  - catalog report (-cc)(目录) 
  k  - keys in index (-ci)(索引的键值) 
  K  - keys and rowids in index (-cI) 
  l  - leaf node keys only (-ci) 
  L  - leaf node keys and rowids (-cI) 
  d  - TBLSpace data rows (-cd) 
  D  - TBLSpace data rows including bitmaps, remainder pages and blobs (-cD) 
  t  - TBLSpace report 
  T  - TBLSpace disk utilization report 
  p  - dump page for the given [table and rowid | TBLSpace and page number] 
  P  - dump page for the given chunk number and page number 
  B  - BLOBSpace utilization for given table(s) [database:[owner.]]table 

-q   - quiet mode - print only error messages 
-n   - answer NO to all questions 
-y   - answer YES to all questions 

五、 几个主要的tbcheck选项: 
 TBCHECK -PT  DATABASE:TABLE 
产生有关TBLSPACE的报告。包括EXTENT和空间使用信息。信息的输出来自TBLSPACE TBLSPACE,这是一个特殊的TBLSPACE,用来跟踪ONLINE创建的数据库,是根DBSPACE中的第二个TBLSPACE,其TBLSNUM为1000002。这个TBLSPACE中的每行保存一个数据库的信息。 
 TBCHECK -Cd DATABASE:TABLE 
测试一个表空间的数据。它从表空间中读取所有页做一致性检查,并检测位图也以确认该页被正确映射。它所做的工作包括:确认数据的有效性,对特殊数据做相应标志(如BLOB页,剩余页等)。 
 TBCHECK -Ci DATABASE:TABLE 
测试表上的索引,比如是否所有的ROWID都指向表中的有效行,必要时,重建SYSINDEXES信息。它所做的工作包括:验证索引是否有效,重建被损坏的索引,并对索引树重新做相应调整。 
索引策略: 
应加索引的字段:用于连接(JOIN)的字段,用来过滤的字段(在WHERE条件中使用的字段,称为过滤器),用于排序的字段(ORDER BY)。 
不应加索引的字段:有高重复值的字段 
另外,可以用主键限制索引个数,加复合索引来避免重复,用聚簇索引加快索引速度。 
六、其它重要的工具: 
 UPDATE STATISTICS  [LOW | MEDIUM | HIGH] 
此语句的三个主要作用:更新内部表;产生数据分布;优化存储过程 
应定期使用 
 tbinit 
用于初始化数据库共享内存。每次开机后都必须执行此命令。一般将它放在/etc/rc2.d目录下的一个自引导文件中。 
例如:当以应用软件注册时,系统提示: 
DBERR –529/C-ISAM –123 [Open Database] 
使用finderr查529错误,提示: 
-529  Cannot attach to shared memory. {不能使用共享内存} 
此时,使用tbinit命令将数据库共享内存进行初始化后,系统恢复正常。 
 tbmode -sy| tbmode -ky 
用于关闭数据库共享内存。为了数据的安全,每次关机前都必须执行此命令。为了简化操作,我们经常将它放在/etc/rc0.d目录下的一个自引导文件中,让系统进入多用户时自动来执行此文件。 
 finderr 
用来查询数据库的错误。当系统出现数据库错误时,系统处了给你简单的出错提示外,还给出一个错误号。你可以使用此命令对这种错误进行深入的分析,然后针对不同的错误进行相应的处理。 
例如:当你在超级用户root下对储蓄数据库bankstar进行操作时,系统提示: 
387: No connect permission. 
111: ISAM error: no record found. 
意思是:系统出现387错误,错误的原因是:没有connect权限。 
原因分析: 
操作数据库至少需要CONNECT权限。解决如下:informix用户注册,执行如下SQL语句:grant connect to root 
阅读(438) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~