我创建了一个需要大量时间和资源才能完成的程序。我的数据库管理员不得不终止该程序,因为它大大降低了 Oracle 服务器的速度,并且公司中的所有其他用户都无法工作。
我的程序是这样的:
procedure my_proc IS
cursor c IS (SELECT id FROM very_larg_table);
row_ c%rowtype;
begin
open c;
fetch c into row_;
exit when c%notfound;
run_a_task_that_takes_0.2_of_a_second_per_run(row_.id);
commit;
end loop;
close c;
end;
有very_large_table
大约 25 万行。将其乘以 0.2 秒,您将获得 14 小时的执行时间。
此任务只能运行一次。它应该根据许多条件构建额外的数据。运行后,这些数据将在可接受的时间内为每条新记录实时构建,并且不会再在历史上重新构建。
但这是必须在我们的数据库上运行的方式。我怎样才能减慢它的速度,让它在 24 小时内执行,但对整个系统的影响较小?