我多久会在Oracle中提交一次

Jun*_*aid 4 sql database oracle oracle10g oracle11g

我正从大型Oracle数据库中删除大量数据.我遵循的过程是删除记录表A,原因是表B上的CASCADE删除,其中某些表上有CASCADE删除.所以基本上有几个表用CASCADE删除相互关联.

目前,此过程在表A中的多个记录的迭代中工作,并且在迭代的最后(仅当删除所有数据时)I COMMIT.该过程大约需要30个小时才能完成.

我被建议有常规COMMIT,即表A的每个记录删除的COMMIT(包括删除子表中的任何后续记录).

我知道常规提交会使撤消日志大小保持较低但是常规提交是否有任何性能提升?我会看到完成脚本所需的时间有所改善吗?

Jus*_*ave 6

预计频繁提交不会改善代码的性能.执行大量临时提交可能会迫使您花费更多时间等待同步操作,从而减慢代码速度.如果你在中间提交,你可能不得不编写相当多的代码来确保你的代码完全可以重启.

您是否有AWR或statspack快照或跟踪文件,显示您实际等待的内容?30个小时做任何事情似乎都是不合理的.这会让我强烈怀疑你错过了一些索引,这些索引会导致你的级联删除每次删除一行时进行全表扫描.修复丢失的索引或执行多行删除以便不必频繁地执行全表扫描似乎更有可能提高性能,而不是担心何时提交更改.