job定时更新时效的需求,求思路

hgamezoom 2013-01-22 11:25:04
系统中所有的任务都放在一张表中,简单的说任务就是每个人处理过的(或待处理)的一个事项,因为操作人多,任务类型也多,所以数据量现已大于1000万。

每条任务上有一个时效字段,即该条任务完成时间最多是X小时,如果超时未完成则要做相应记录。

现在我们是每小时通过job update该表的时效字段,让其-1,直到为0则超时。由于该表大部分是已完成任务,未完成的任务才需要更新时效,大约有几万条数据。

现在发现每次update都很缓慢,各种过滤条件加进去,需要几十秒到几分钟不等,这时候所有被update到的任务会被锁定,用户无法对这些任务进行update等操作,影响系统整体可用性。

求一个解决此问题比较好的思路。(由于要保持一定时间的历史记录可以查询 ,该表的记录量不会低于1000万)


...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgamezoom 2013-01-24
  • 打赏
  • 举报
回复
引用 2 楼 yjytiantang 的回复:
将表里数据转移一下,ctas备份出来一个; 现在这个表是分区表吗?1000万不是很大啊~
这个表现在没有分区,对这种情况分区能有很大提升吗?
yjytiantang 2013-01-22
  • 打赏
  • 举报
回复
将表里数据转移一下,ctas备份出来一个; 现在这个表是分区表吗?1000万不是很大啊~
shiyiwan 2013-01-22
  • 打赏
  • 举报
回复
因为不了解具体情况,所以比较难给出正确的方法。试着说点自己的想法。 第一印象,该表的更新太过频繁,表内容既包含任务信息;也包含日志操作信息。 频繁更新情况下索引不是最好的选择。建议在第一次-1时取出rowid保存,后面直接使用rowid做更新。 还有一种方式是使用gemfire,直接将所有未完成的任务导入到内存,日常直接操作内存。只有在任务完成时才更新到数据库。

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧