我已經創建了一個需要花費大量時間和資源來完成的過程。 我的數據庫管理員不得不殺掉這個程序,因爲它使Oracle服務器變慢,公司所有其他用戶都無法工作。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
有大約250幾千行。乘以0.2秒,你會得到14小時的執行時間。
此任務僅運行一次。它應該根據許多條件建立額外的數據。在運行之後,這些數據將在可接受的時間內爲每個新記錄生效,並且不會在歷史上重建。
但是這是必須在我們的數據庫上運行的方式。我如何減慢速度,在24小時內執行,但對整個系統影響較小?
廣告1.謝謝,我會嘗試 – SWilk
廣告。如果我在循環,我將鎖定一個月底提交表爲14小時或東西。我寧願不這樣做。如果在中間的某個地方出了問題,而且我在每個處理過的行後面進行了提交,那麼我可以從我已經停止的地方恢復。 – SWilk
@SWilk爲你的更新添加一個計數器並每1000行左右提交一次 – mavroprovato