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

新鲜鱼排 新鲜鱼排 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题描述:根据tableA中Col2列数据对其他数据表进行更新,并且把Col2输具由0变成1。为了提高查询速度将数据表tableA中Col2使用了function-based index,现在使用嵌套游标来更新Col2的数据,并且为了提高执行速度使用两个程序来更新数据。偶尔会出现对其它数据表进行两次更新的情况,分析可能是由于多个程序调用的原因,使用了10个Server同时调用,结果出现问题的几率达到了25%。下面介绍一下具体的代码。

由于不能贴图,我将问题发在Blog上,
http://blog.csdn.net/dutguoyi/archive/2007/06/09/1645762.aspx

数据表tableA,数据结构如下:
Col1 Col2
Aa 0
Bb 1
Cc 1

步骤:
1. 建立Cur1
CURSOR cur1
IS
SELECT Col1 FROM tableA WHERE CEIL (col2) = 0 ORDER BY col3;
2. 建立Cur2
CURSOR cur2
IS
SELECT 一些数据(不列举了) FROM tableA WHERE col2 = 0 AND Col1 = 由Cur1中Col1变量得到的值 ORDER BY col3 FOR UPDATE SKIP LOCKED;
3. Cur1中嵌套Cur2

FETCH cur2 INTO 由Cur1中Col1变量得到的值;
FOR cur_row IN cur2 LOOP
UPDATE tableA SET col2 = 1 WHERE col1 = parameter_col1;
p_count := p_count + 1;
COMMIT
END LOOP;

为了更好的提高查询速度针对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

...全文

相关推荐

oracle 索引类型

四、Function-Based索引Function-Based索引允许基于函数的结果创建索引,适用于需要对某个函数结果进行查询的场景。例如,对字符串进行lower()转换后查询。优点:1.

weixin_38669628

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

flyair_China

【管理科学】【金融工程】第三十三篇 企业金融资产(含股票/债券)/固定资产 管理01

编号企业性质行业企业规模企业能力模型配方算法/模型名称数据结构列表算法逐步思考推理的数学方程式及参数列表及参数的值范围时序数学方程式误差/算法复杂度底层规律和理论关系知识和法律法规1民营制造企业制造业中型现金流预测与流动性管理时序预测+统计回归LSTM (长短期记忆网络) + ARIMA, , , , ARIMA(p,d,q): 其中: B: 滞后算子; d∈[0,2] (差分阶数); p∈[0,5]; q∈[0,5]; θ为移动平均系数 ∈[-1,1] LSTM:

flyair_China

oracle index学习总结

Bitmap索引将每个值映射为一个位图,节省存储空间,但不适用于频繁的插入、删除和更新操作。3. Function-Based索引:基于列的一个函数结果创建索引,使得查询可以基于函数的结果进行检索。

weixin_38669628

Oracle Index 索引介绍

**函数索引(Function-Based Index)** 允许基于列的函数结果创建索引,使得对函数的结果进行查询时,无需实际计算。5.

weixin_38669628
评论 24
收藏 已收藏
分享
返回顶部
新鲜鱼排
Oracle 高级技术 3,499 成员 18,710 内容