Informix -244 错误分析

Informix -244 错误 :

Could not do a physical-order read to fetch next row.

 具体错误解释:

   #finderr -244

原因:

a.锁表

b.记录太多

c.页损坏

d.某个进程死了以后资源未释放导致

   在数据库端用 onstat –g ses/onstat –g sql /

Onstat –k 等找出锁表进程,用onmode –z结束该进程,

不行,重启数据库释放。

 

锁方式:

   行方式(row),页方式(默认page),表方式(table)

 

解决:

   1.降低锁级别

   2.减少加锁事务的时间跨度

   3.设置等待解琐时间

 

相关命令:

   )检查索引及页损坏情况

#oncheck –cID database_name:table_name

   ) 查看锁级别

#oncheck –pt database_name:table_name

   )设置锁级别(行方式)

#alter table table_name lock mode(row)

   )设置隔离级别

#set isolation to dirty read

   )设置等待解锁时间(不宜过大)

#set lock mode to wait second()

不等待

#set lock mode to not wait

1$ onstat -k | grep HDR+X

HDR+X 为排他锁
HDR

X
互斥

owner
是正持有锁的线程的共享内存地址

2$ onstat -u |grep c60a363c

c60a363c 1中查到的owner内容。
sessid
是会话标识符编号

3$ onstat -g ses sessid
根据sessid得到进程
pid
pid
与此会话的前端关联的进程标识

$ onstat -g sql sessid
通过上面命令查看执行的sql语句

4$ ps -ef |grep pid

由此,我们可得到锁表的进程,可根据实际锁表进程的重要程度的具体情况采取相映处理方法:
对于重要且该进程可以自动重联数据库的进程,可以用onmode  -z sesid 的方法杀掉锁表session
$ onmode –z sessid
否则也可直接杀掉锁表的进程 kill pid
$ kill -9 pid

 

将表的页锁改为行锁  
 
参考语句为
 
  unload   to   optimize.sql   delimiter   ""   select   'alter   table   '||tabname||    
  '   lock   mode(row)'||';'from   systables   where     locklevel="P"   and   tabid   >   99  
 
将卸载的optimize.sql稍微删除一下其中出现的字符或乱码,后运行,即可把表的页锁改为行锁

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值