服务器 频道

INFORMIX-OnLine故障诊断与排除

  【IT168 服务器学院】1)系统不能进入静态方式

  开放系统以其非常好的能力连接不同的计算机软件,硬件。在这种环境下,诊断问题时就需要关注问题的全局与细节。本文就如果诊断INFORMIX-Online的问题给出了良好的建议。

  诊断问题的症状

  系统管理员诊断问题时首先要定义问题的症状。     

  系统是否难于进入静态(quiescent)状态?           

  是否有非正常结束的INFORMIX系统进程?           

  系统进程是否定期挂起?     

  下面的讨论指出如何定位系统问题,讨论可能的起因,并对这些问题的解决提出建议。      

  系统不能进入静态方式

  该症状常常伴有一条错误信息。一般错误是:

  tbinit:fatal error in shared memory creation (共享内存生成时有严重错误)

  检查系统初始化时定义的系统日志文件来发现错误的出处。该日志的缺省名为$INFORMIXDIR/online.log。在此文件中会看到与下面相近的信息:

  16:00:56 Cannot Open Primary Chunk ''/dev/turbo_root'',errno = 13

  16:00:56 Cannot Open Primary Chunk ''/dev/turbo_root'',errno = 13

  16:00:56 I/O error,Primary Chunk ''dev/turbo_root'' -- Offline

  16:00:56 I/O lseek() chunk 1,pagenum 0, pagecnt 1 -->errno =9

  16:00:56 INFORMIX-Online Stopped

  这些错误是由UNIX权限问题造成的。OnLine产品需要由root来安装。系统的部分可执行程序应属于root或者root有权限。所有INFORMIX系统文件的属主及权限都应该记录在$INFORMIXDIR/etc/onlinefiles中。检查所有OnLine文件权限,属主,属组是否正确。

  也应检查chunk的权限,保证CHUNK有UNIX权限660(crw-rw----),其属主,属组为informix,建议管理员使用系统管理员实用程序tbmonitor定义OnLine系统配置。初始化例程自动进行权限检查,计算可利用的磁盘空间,但如果配置文件是直接修改的,就并非如此了。

  如果系统日志文件中并未记录有用的错误信息,而OnLine系统刚刚升级,则应检查确认页大小(与OnLine产品一道发送的缺省配置文件中定义)是否已经改变。若页大小变化了,就必须从老系统输出的数据(dbexport)再将数据输入到新系统上去(用dbimport)。      

  错误tbinit:fatal error in shared memory creation 经常伴有操作系统错误或者附加的OnLine错误。这也能用来判定问题为什么会发生。下列错误说明为何共享内存不能生成。     

  tbinit:shmget[EEXIT][17]:           

  tbinit:shmget[EINVAL][22]:  

  tbinit shmat[EINVAL][22]:                 

  tbinit shmget[ENOSPC][28]:

  Bad Primary Chunk ''/dev/devname''                 

  tbinit:shmget[EEXIST][17]:            

  tbinit:shmget[EEXIT][17]:

  这个错误表明共享内存段在申请的内存位置上已经存在。tbinit进程从环境变量TBCONFIG指定的文件读取配置。若TBCONFIG未指定,tbinit从$INFORMIXDIR/etc/tbconfig文件读取配置。一旦获取配置信息,tbinit派生一个子进程,它将成为tbinit后台进程。tbinit后台进程用唯一的SERVERNUM值做一部分输入值来计算共享内存键值,唯一的SERVERNUM值确保每个OnLine系统生成自己特定的共享内存空间。仔细检查以保证文件配置正确,SERVERNUM的值唯一。      

  tbinit:shmget [EINVAL][22]:or tbinit:shmat[EINVAL][22]

  当无效参数传递给UNIX调用时,UNIX产生错误。用OnLine术语来说这意味着tbinit申请的共享内存未被分配。一旦UNIX接受SERVERNUM和共享内存键值,tbinit便可将Online共享内存段附加在它的虚拟地址空间上。虚拟地址,共享内存段要附加的tbinit(或其他的用户进程)的内存空间是由SHMBASE定义的。若SHMBASE的值不合法,或申请共享内存大于共享内存核心参数允许的值时,或共享内存段由于边界对齐问题而无法连续分配时,UNIX会认为传给共享内存附加调用的内存值是无效的。

  现在对UNIX核心参数作一回顾,以下描述的时有关共享内存配置的参数。     

  核心参数

  SHMSIZE 是操作系统范围内共享内存段的最大值(以k为单位)。

  SHMMAX 是操作系统范围内共享内存段的最大值(以字节为单位)。

  SHMMIN 是操作系统范围内共享内存段的最小值(以字节为单位)。

  SHMMNI 是操作系统范围内共享内存标识的最小数值。

  SHMLBA 是共享内存低段地址,也就是附加共享内存的边界地址

  SHMSEG 是每个进程附加共享内存段的最大数目。

  SHMALL 时系统范围内共享内存的最大量。

  信号灯分配参数

  SEMMNI 是操作系统范围内信号灯标识的最大值

  SEMMNS 是操作系统范围内信号灯的最大值

  SEMMSL 是每个标识信号灯的最大值。      

  参数值的定义

  SHMALL*操作系统页大小=全部可能的共享内存(以字节为单位)。

  SHMMAX=SHMSIZE*1024.

  SHMMNI*SHMMAX=操作系统范围内可编址的共享内存(以字节为单位)。

  SHMSEG*SHMMAX=一个操作系统进程可编址的共享内存(以字节为单位)。     

  参数设置指导:

  规则1 SHMALL * 页大小 >= SHMSEG * SHMMAX

  规则2 SHMALL * 页大小 = SHMNI * SHMMAX

  规则3 SHMMSL = 主机用户进程数/25

  规则4 SHMMAX > SHMLBA

  tbinit: shmget[ENOSPC][28]:

  当系统申请空间,而设备已满时,UNIX产生该错误。UNIX申请共享内存的交换区,保证交换空间驻留的设备上有足够的空间。没有足够的共享内存ID时也会发生错误,检查系统SHMMNI核心参数。      

  Bad Primary Chunk ''/dev/devname''

  由于控制器,硬件或者权限问题,使得向chunk写失败时,Online标记该chunk为down,这样做的目的是为了通知管理员数据完整性已经被破坏,检查系统日志文件中I/O错误。以下是典型的硬件I/O错误的例子:

  I/O error,Primary Chunk ''/dev/rdsk/devname'' -- Offline

  I/O read(),Chunk 2,pagenum 272714,pagecnt 1 -->errno =5

  I/O write() chunk 2,pagenum 2,pagecnt 1 --> errno = 5

  发生I/O错误时,检查控制器和硬件。许多UNIX系统提供检查未安装原始设备的低级别实用程序,不要在未安装的原始设备上使用fsck命令,这是因为fsck会覆盖设备上存储的信息,为恢复系统,INFORMIX建议管理员恢复最后的存档,用日志恢复失败了的写操作。

  一旦共享内存初始化完成,物理日志从上一次检查点开始检查物理日志的前象,如果该记录存在,开始FAST RECOVERY,进入物理恢复,每个前映象写回到磁盘上正确的位置上,一旦完成后,逻辑恢复开始,并处理上次检查点之后逻辑日志中记录所对应的事务,如果快速恢复非正常结束,或是不能让OnLine进入静态(Quiescent)方式,则让OnLine进入脱机(off-line)方式,再启动OnLine。若OnLiner仍不能进入静态方式,则应该恢复系统存档。

  2)OnLine非正常结束

  OnLine非正常结束时,描述有关OnLine进入脱机方式原因的信息将写入日志,下面时OnLine结束时系统日志中登陆日志的示例:     

  Process Aborted Abnormally: pid=22500 user=210 us=c003f15c flags=a01     

  Process Aborted Abnormally (critial section):pid=22500 user=210 flag=a01

  INFORMIX-OnLine entering ABORT mode!!! INFORMIX-OnLine Stopped      

  日志条目显示一个进入临界状态的sqlturbo进程非正常结束,临界状态是指一个进程执行写调用而不能被中断所用的术语。如果一个进程处于临界状态时非正常结束,OnLine为保护数据完整性而进入脱机方式。当OnLine重新启动时会执行快速恢复,回滚所有未完成的事务。

  如果持有锁存器(latch)的进程非正常结束,OnLine也会非正常结束。锁存器用于控制对诸如缓冲区,锁定表等共享内存资源的访问。为防止干涉其它进程申请共享内存资源,INFORMIX OnLine控制对有锁存器的资源表的访问。

  虽然OnLine后台进程对夭折的进程进行日常的清理工作,但数据一致性阻止后台进程在清除过程中释放共享内存锁存器。对后台进程来说,判断用户进程是否完成对数据库的修改是不可能的。为解脱这以一困境,OnLine强制自己进入脱机方式。当OnLine回到联机(Online)方式时,自动进行快速恢复。快速恢复使OnLine达到与最后一个完成事务一致的状态。

  当持有锁存器的进程结束时,会生成以下的条目:

  Process Aborted Abnormally: pid=10743 user=104 us=60204c flags=21

  Process Aborted Abnormally (latch): pid=10743 user=104 flags=21

  INFORMIX-OnLine entering ABORT MODE!!!

  -- OnLine Aborting -- us=6019a8,pid=11987,uid=1000

  这些日志条目提供的信息在判定进程为何非正常结束时十分有用,条目中各域的定义如下:

  pid---------sqlturbo UNIX进程id

  user--------真正用户id

  us----------共享内存中用户结构的地址

  flags-------定义如下

  0x0000001------0x0000001 正在使用的用户结构

  0x0000002------0x0000002 等待锁存器

  0x0000004------0x0000004 等待锁

  0x0000008------0x0000008 等待缓冲区

  0x0000010------0x0000010 等待检查点

  0x0000020------0x0000020 等待读取调用

  0x0000040------0x0000040 向存档磁道写逻辑日志

  0x0000080 等待清除长事务

  0x0000100------0x0000080 特定turbo检测用户

  0x0000200 处于事务中

  0x0000400 进程在回滚

  0x0000800------0x0000100 处于临界状态的进程继续...

  0x0001000------0x0000200 特定的后台进程

  0x0002000 开始工作日志登记

  0x0004000------0x0000400 存档

  0x0008000------0x0000800 清除死进程

  0x0020000------0x00002000 特定缓冲区刷新进程

  0x0010000------0x0002000 等待逻辑缓冲区写入

  0x0040000------0x0004000 该进程是远程服务器

  0x0080000 该进程正完成远程任务

  0x0100000------0x0008000死锁超时

  -----------0x00010000-----普通锁超时

  -----------0x00020000-----超时等待期已结束

  -----------0x00040000-----等待事务

  以上的日志条目中,sqlturbo进程的UNIX进程id为10743,真正用户id为104,共享内存中用户结构的地址为0x60204c,标志显示用户结构正在使用中,OnLine引擎正处于读取调用之中(0x00000001,&0x00000020)。

  这个信息可以标识非正常结束的用户,查明他或她是否遇到意外的错误,或以某种方式导致进程的非正常结束。用户不应对Informix进程使用kill -9命令。管理员可以用onmode -z pid命令中止某一个sqlturbo线索。如果进程正持有锁存器或处于临界状态,tbmode命令不会立即中止该进程。

  3)OnLine进程似乎被挂起

  当OnLine用户抱怨他们的进程被挂起,或者不能与OnLine相互作用时,运行onstat -a ,获得有关问题的本质信息。onstat是OnLine提供的实用程序,是用来监视系统的命令。它提供了与tb_Monitor(onmonitor)实用程序相近的,但更为详尽的统计数字。

  OnLine挂起的最明显的原因时逻辑日志已充满而且需要备份。在tbstat输出中检查逻辑日志的状态。在逻辑日志填满后备份日志,就会让OnLine继续处理事务。

  进程必须等待检查点完成。检查点请求可以阻止进程进入临界状态或者获得锁存器资源。onstat显示的第1行为状态行,它会显示是否申请了检查点。如果条件成立,有可能是检查点在等待资源。检查用户结构下的等待队列来找出资源的地址。一旦定位到资源,判定拥有该资源的用户进程状态。已经进入临界状态,或是持有锁存器资源的进程可以阻止检查点的完成。例如,存档进程在磁带改换期间一直持有一个锁存器,并禁止检查点的发生。     

  帮助诊断问题的实用程序   

  实用程序名

  目的

  描述

  使用       

  dbexport

  卸成ascii文件

  把数据库卸到磁盘或磁带上,生成包含表结构的数据库.sql文件。结构并不包含extent大小

  数据库移植到其它平台               

  dbimport

  加载ascii文件

  从dbexport生成的数据库结构及ascii数据,生成并加载数据库,直接由磁盘或磁带加载。

  由其它平台输入数据

  tbunload

  卸成二进制文件

  将数据库或表的数据影象,卸到磁盘或磁带上,用于页大小,机器结构相同的OnLine系统

  高效的,真正二进制方式卸数据

  tbload

  由二进制文件加载

  由tbunload生成的磁带加载数据库或表

  高效的,数据库数据加载方式

  tbinit

  管理

  初始化共享内存,启动共享内存后台进程

  tbmonitor命令行

  tbmode

  管理

  使OnLine脱机或联机,中止OnLine进程

  tbmonitor命令行

  tbmonitor

  管理

  由管理员来开启OnLine系统,报告OnLine系统状态,执行存档,恢复备份逻辑日志,改变系统状态

  交互式全功能管理程序

  tbparams

  管理

  由管理员用来增加或删除逻辑日志,改变物理日志的大小及位置

  tbmonitor命令行

  tbspaces

  管理

  由管理员用来增加或删除dbspace或blobspace,为它们增加chunk,改变状态

  tbmonitor命令行                

  tbstat

  系统检测员

  提供有关OnLine状态,共享内存资源的详细信息

  报告/debug工具                

  tbtape

  管理

  在磁带上作系统存档,或备份逻辑日志

  tbmonitor命令行                

  tblog

  系统检测员

  提供有关逻辑日志条目的详细信息

  报告/debug工具                

  tbcheck

  系统检测员

  报告并检查OnLine系统完整性,执行数据,索引页,extent,位图页的低级别检测,提供有关保留页,extent和系统信息

  报告/debug工具

0
相关文章