Oracle function-based index对于数据更新处理延时问题。

来源:互联网 发布:微信伪装地址软件 编辑:程序博客网 时间:2024/05/07 11:21

 

问题描述:根据tableA中Col2列数据对其他数据表进行更新,并且把Col2输具由0变成1。为了提高查询速度将数据表tableA中Col2使用了function-based index,现在使用嵌套游标来更新Col2的数据,并且为了提高执行速度使用两个程序来更新数据。偶尔会出现对其它数据表进行两次更新的情况,分析可能是由于多个程序调用的原因,使用了10个Server同时调用,结果出现问题的几率达到了25%。下面介绍一下具体的代码。
 
数据表tableA,数据结构如下:
Col1    Col2
Aa        0
Bb        1
Cc        1

 步骤:

 

为了更好的提高查询速度针对Col2列建立了一个function based index,建立的方法如下。Col2列的数据只有1和0两种数据,而且主要是1。
Cur1主要是获取到需要处理的数据。
Cur2主要是获取每一条数据,由于多个程序的调用,所以Cur1中的过滤条件也加了进去,因为某一条数据在一个程序循环过程中可能被另外一个程序执行结束。FOR UPDATE SKIP LOCKED语句的作用是对于数据表更新操作的锁定。
 
原因分析:可能是function-based index的数据更新有延迟问题,一条已经处理结束的数据状态仍然没有变换为1,导致另外一个程序查询到这条数据然后又进行了一次更新。
 
解决方案:去掉function-based index。
 
不知道function-based index是否是这个问题的原因,请解决过类似问题的兄弟多多指点。非常感谢。
参考资料;
Creating a Function-Based Index
http://www.lc.leidenuniv.nl/awcourse/oracle/server.920/a96521/indexes.htm#2943
原创粉丝点击