首页 > 数据库 >Informix杀掉死锁的方法和查看死锁的sql语句

Informix杀掉死锁的方法和查看死锁的sql语句

时间:2023-04-27 17:55:18浏览次数:39  
标签:name 锁表 死锁 Informix sql 进程 table onstat

Informix锁表产生的原因,要么是多个用户同时访问数据库导致该问题,要么是因为某个进程死了以后资源未释放导致的。如果是前一种情况,可以考虑将 数据库表的锁级别改为行锁,来减少撞锁的机会;或在应用程序中,用set lock mode wait 3这样的语句,在撞锁后等待若干秒重试。如果是后一种情况,可以在数据库端用onstat -g ses/onstat -g sql/onstat -k等命令找出锁表的进程,用onmode -z命令结束进程;如果不行,就需要重新启动数据库来释放资源。

                                             
1:$ onstat -k | grep HDR+X          

获得sessid,其中HDR+X 为排他锁,HDR 头,X 互斥 ,sessid 是会话标识符编号。                      2:$ onstat -g ses sessid
根据sessid得到进程pid,其中pid 是与此会话的前端关联的进程标识。
(可通过$ onstat -g sql sessid 命令查看执行的sql语句)                         3:$ ps -ef |grep pid 由此,我们可得到锁表的进程,可根据实际锁表进程的重要程度的具体情况采取相映处理方法:
对于重要且该进程可以自动重联数据库的进程,可以用onmode -z sesid 的方法杀掉锁表session:
$ onmode –z sessid 否则也可直接杀掉锁表的进程 kill pid:
$ kill -9 pid   至此,死锁即被清除掉。          ————————————————————————-                            查找锁定的表名称 通过onstat -k 查找的rowid 等于0的表锁信息的 tblsnum 信息查找表名。
如 tblsnum等于500e19 执行 select * from systables where hex(partnum)=’0×00500e19′ 查找到当前锁表的表名。 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
还可以这样解决:
如果是日志型数据库,在执行的时候,可以先锁定
begin work;
lock table tab_name in exclusive mode;
要执行的sql语句;
commit work;
如果是非日志的数据
lock table table_name in exclusive mode;
要执行的sql语句;
unlock table tab_name;
中间件全局事务锁问题
中间件与informix连接时会出现onstat -k 中 owner 内容为0的现象。
这是应该查看全局事务onstat -x 和onstat -G
DATABASE sysmaster;

select hex(tx_addr) trans_addr,hex(tx_lklist) lock_addr from systrans
where hex(tx_addr) like '%c00000006e329778%';
需要说明的是,c000000007674c58是使用onstat -x 或 onstat -G得到的全局事务的地址。
上面SQL语句提供出该全局事务对应的锁地址,这时如果得到的锁地址与锁表的锁地址相同的话,
你就必需从应用端(通常是三层结构的中间件)发命令让该全局事务回滚或提交,否则该锁会被一直持有,直到你执行oninit。
onstat -k 的owner 列中的地址与onstat -x 中的userthread 对应。
地址: http://www.timetoyou.com/tag/informix%E6%9F%A5%E7%9C%8B%E6%AD%BB%E9%94%81%E7%9A%84sql%E8%AF%AD%E5%8F%A5

标签:name,锁表,死锁,Informix,sql,进程,table,onstat
From: https://www.cnblogs.com/sucretan2010/p/17359794.html

相关文章

  • Mysql查询父、子节点
    一、概述相信大家在实际的开发工程中,都会遇到需要依据当前节点,查询出其上级节点或下级节点的需求。下面就我在工作过程中的处理方式记录如下,如有片面之处,欢迎批评指正。二、示例表结构初始表数据如图:查看表结构和初始数据脚本DROPTABLEIFEXISTS`t_cfg_region`;CREATE......
  • MySQL - SQL语句增加字段/修改字段/修改类型/修改默认值
    1.添加字段,比如我在数据表中添加一个age字段,类型为int(11)ALTERTABLEplayerADDCOLUMNageint(11);2.修改字段名,将age字段改成player_ageALTERTABLEplayerRENAMECOLUMNagetoplayer_age3.修改字段的数据类型,将player_age的数据类型设置为float(3,1)ALT......
  • SQL Server 2022 AlwaysOn新特性之包含可用性组介绍
    由于技术能力有限,文章仅能进行简要分析和说明,如有不对的地方,请指正,谢谢......
  • sql.SQLException: 对只转发结果集的无效操作: absolute,可滚动结果集
    获得ResultSet的长度可以使用getRow,但是首先要设置ResultSet为可滚动结果集,否则会报java.sql.SQLException:对只转发结果集的无效操作:absolute设置方法为Statement 的设置方法:Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_O......
  • distinct,sql语句去掉重复值,去掉重复值
    感谢老紫竹群中joejoe1991帮助selectdistinctdwfromkk.kkyh这条语句查出来的dw是没有重复值的 黑色头发 http://heisetoufa.iteye.com如果发现本文有误,欢迎批评指正......
  • DataX-在Windows上实现postgresql同步数据到mysql
    场景DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130330353在上面实现sqlserver到mysql的数据同步之后,如果要实现postgresql到mysql数据同步流程一样。以PostGis中的OGC元数据......
  • Linux安装Mysql5.7
    前言:还是和以前一样,linux安装软件的目录都是data目录1.进入data目录,创建mysql目录并进入该目录cd/datamkdirmysqlcdmysql 2.删除默认配置,不推荐rm-rf rm/etc/my.cnfy 3.上传"mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz"文件到当前目录(/data/mysql)"m......
  • mysql字段类型json更新
    updatetbl_testsettest_json=JSON_REPLACE(test_json,'$."jsonFieldName"',(CAST(test_json->'$."jsonFieldName"'ASSIGNEDINTEGER)-70*365-19)*86400-3600*8)wheret......
  • MySQL锁机制详解-表锁与行锁
    转、MySQL锁机制详解-表锁与行锁https://blog.csdn.net/huangjhai/article/details/119011417  转:什么是线程死锁?如何避免死锁? 相互强占彼此资源,导致彼此等待。线程挂起 阻塞......
  • MySQL用的在溜,不知道业务如何设计也白搭!!!
    MySQL业务设计作者:博学谷狂野架构师GitHub:GitHub地址(有我精心准备的130本电子书PDF)只分享干货、不吹水,让我们一起加油!......