暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s常见问题解析 -- 查找锁会话并解锁

原创 GBASE数据库 2024-01-22
323

本文摘自GBASE南大通用社区,by:wty,原文请点击:https://www.gbase.cn/community/post/2876

问题现象

执行SQL时报错

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

154: ISAM error: Lock Timeout Expired

或者

107: ISAM error:  record is locked.

或者

106: ISAM error: non-exclusive access.

这些报错都与锁相关,当你的一个SQL偶尔报类似错误,可能只是运气不好,碰巧执行的时候被锁了。

如果多次执行一直报锁,就需要考虑是不是有会话长时间锁住数据没有释放,需要强制结束掉这个会话来解锁。

解决方法

1)通过GBase Data Stdio解锁

打开数据库导航中,数据库连接下面的会话页面,在右侧会话页面中选择锁

找到被锁的表对应的锁会话ID

切换到会话页面找到刚才的会话ID,点右键,选择结束强制结束会话

2)通过SQL和命令行解锁

连接sysmaster系统库,查询syslocks系统表,查询锁信息,推荐使用where条件来筛选结果

[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> select * from syslocks;

dbsname  wty_utf8
tabname  aaa
rowidlk  0
keynum   0
type     IX
owner    160
waiter 

找到备锁表那一行数据对应的owner列里的会话ID

执行命令强制结束会话解锁

onmode -z 160

 

相关要点

107: ISAM error:  record is locked.

这个报错一般是没有配置锁等待时间,导致碰到锁立刻就报错结束查询,配置锁等待时间可以大幅度减少锁相关的报错

 

106: ISAM error: non-exclusive access.

这个报错一般是正在对表执行alter table之类的修改表结构操作,也可能是正在创建索引,贸然强制结束锁会话可能会导致回滚,相关操作失败。建议先确定操作源头再考虑等待执行完毕还是强制解锁。

 

如果不需要获取特别准确的数据时,可以暂时将隔离级别设置为DIRTY READ,此模式不管数据是否已经提交都会直接读取,不需要进行解锁就可以查出数据。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论