Chinaunix

标题: 一个进程中查询表,另一个进程insert同一个表,有干扰么 [打印本页]

作者: gammareal    时间: 2012-07-28 22:36
标题: 一个进程中查询表,另一个进程insert同一个表,有干扰么
一个进程中,先是select count(列名)from t1 where col=。。。
有满足条件的记录存在,就一条;然后使用游标来fetch这条记录,同样的条件,却是notfound,
期间没有别的进程删除这个表中的数据;
同时只是有另一个进程在insert同一个表,时间上紧挨着,日志里就是这样的;
会是什么原因呢?
---------------
生产中出现的情况,以前据说也有过,但是一年也不会有几次,但现在又出现了。
作者: gammareal    时间: 2012-07-28 22:40
本帖最后由 gammareal 于 2012-07-28 22:52 编辑

12:48:52:693 SELECT count(*) from  t1 where 。。。(进程1,这是有记录)
期间没有改动此表的日志记录
--------------------------------
12:48:52:697 。。。SELECT first 1 UserId OperatorUserId。。。from  t1  where。。。(进程1,这时返回记录数为零,)
12:48:52:698 。。。INSERT INTO t1 。。。(进程2,)
---------------------------------
日志上看,时间就是这样子的。

补充:之后再次查询,数据库中确实是有这条数据,
作者: 水平展开    时间: 2012-07-30 08:56
查询的那条不是你插入的那条的话,这个就不是常规情况了!
作者: gammareal    时间: 2012-07-30 21:36
两次查询的where条件是相同的,是根据客户输入的流水号来查询的,客户输入的流水号被存储在程序中,两次查询都是使用的同一变量,流水号在表里是唯一的,不会重复;
事后查看数据库,流水号对应的记录是存在的,只有一条;
老的员工说,几年前就出现过这样的事情,但是 一直没有找到问题的原因,也无从解决,好在极少出现这种情况;日志里的提供的相关信息很少,生产上的代码又不允许随便改动,不能添加对更多的数据的输出。
要是有人解决过类似的问题就好了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2