免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1387 | 回复: 1
打印 上一主题 下一主题

我遇到一个难题,关于锁的问题(在线等,急) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-13 17:16 |只看该作者 |倒序浏览
各位大虾,本人刚开始研究INFORMIX不久,对其锁问题不太熟悉。
在我的一个应用中,根据A表的对应关系,来UPDATE  B表中的数据;
大体代码如下:
set isolation to dirty read;
set lock mode to wait 30;
EXEC SQL declare cur1 CUSOR for select col1,col2 into :a,:b from A;
EXEC SQL open cur1;
EXEC SQL fetch cur1;
EXEC SQL UPDATE B SET cola=:a where colb=:b;
基本上就如上代码:
在执行后,一直都在wait 30状态,
也没报什么错;
然后我就将set lock mode to wait 30;改成set lock mod to not wait;
从新执行,运行 onstat -g sql
看到还是正常的, ISO状态 DR, not wait;
也没报什么错;
但就是一直没运行出来;
B表的数据是有点大 有1K万条数据;A表只有6K的数据量,按照以前的经验只要最多1个多小时就跑出来;
我就怀疑出现死锁;
就 dbaccess sysmaster; 查 select * from syslocks where tabname="B"
返回两条记录
发现同一个表,同一OWNER,比如31422,对应两个锁,一个类型为U(更新锁),一个类IX(意图独占锁)
但是从syssesprof和sysptprof表中,B表对应死锁个数为0,其对应的SID死锁个数也为0;

现在我就有几个问题;
为什么同一个表会对应两个锁,而这两个锁又分别是对应的同一个会话;其实都是我的应用产生的;
第二个问题
在我的 set lock mode to wait 30的情况下;
在没有其他应用操作或查询B表的情况下,为什么在运行onstat -g sql 该表对应的状态总是 set lock mode to wait 30;这种状态就说明有其他用户在锁表,但是就没有这种情况啊。
第三个问题
这是一个锁溢出问题吗?什么是锁溢出?

谢谢各位了。小弟实在是才学蔬浅;
我的QQ 4198585
希望大家能帮助解决这个问题;

论坛徽章:
0
2 [报告]
发表于 2004-11-13 23:39 |只看该作者

我遇到一个难题,关于锁的问题(在线等,急)

帮你顶一下。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP