oracle提高delete的效率,提高Oracle DELETE性能的策略

我们有一个开始变大的Oracle 11g安装.该数据库是在集群上运行的并行优化系统的后端.数据库中包含与进程的输入以及优化步骤的输出.输入包括rote配置数据和一些二进制文件(使用11g的SecureFiles).输出包括当前存储在数据库中的1D,2D,3D和4D数据.

数据库结构:

/* Metadata tables */

Case(CaseId,DeleteFlag,...) On Delete Cascade CaseId

OptimizationRun(OptId,CaseId,...) On Delete Cascade OptId

OptimizationStep(StepId,OptId,...) On Delete Cascade StepId

/* Data tables */

Files(FileId,Blob) /* deletes are near instantateous here */

/* Data per run */

Oneddatax(OptId,...)

TwoDDataY1(OptId,...) /* packed representation of a 1D slice */

/* Data not only per run,but per step */

TwoDDataY2(StepId,...) /* packed representation of a 1D slice */

ThreeDDataZ(StepId,...) /* packed representation of a 2D slice */

FourDDataZ(StepId,...) /* packed representation of a 3D slice */

/* ... About 10 or so of these tables exist */

收割者脚本每天都会出现,并查找DeleteFlag = 1的情况,并继续使用DELETE FROM Case WHERE DeleteFlag = 1,允许级联继续.

这个策略非常适合读/写,但是当我们想要清除数据时,现在已经超出了我们的功能!擦除是删除一个案例需要〜20-40分钟取决于大小,通常会超载我们的存档空间.下一个主要版本的产品将采取“从根本上”的方法来解决问题.下一个次要版本需要保留在数据库中存储的数据范围内.

因此,对于次要版本,我们需要一种可以提高删除性能的方法,最多需要对数据库进行适度的更改.

> REF分区,但问题是如何?我会喜欢在Case和REF上执行INTERVAL,其余的是but that isn’t supported.有没有办法通过触发器手动分割CaseId的OptimizationRun?

>禁用归档/重做日志以进行删除?找不到与此相符的提示.不确定是否可行

>截断?这可能需要一些复杂的表设置.但也许我没有考虑到我的所有选择. (每个答案,受伤)

为了帮助说明这个问题,每个案例的数据范围从15MB到1.5GiB,任意20k到2M行.

更新:DB的当前大小为〜1.5TB.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值