JOB執行時間不斷推後的問題

2021-08-22 10:15:07 字數 2739 閱讀 4908

文章**:

工作中我們經常用oracle的job執行一些定時任務,實踐中我們發現,設定執行時間和間隔後,每次執行的時間都會有點延遲,經過一段時間後,推遲累計的效應就相當明顯,必須要重新調整時間才能滿足要求,為什麼會出現這種現象呢?經過研究,我們發現了問題所在。下面舉例說明這個問題。

建立乙個job,內容為插入系統時間到資料庫,執行間隔為1分鐘,即inteval是sysdate+1/(24*60),我們發現記錄的時間是不斷推遲的,即:

2012-06-27 12:32:08

2012-06-27 12:33:13

2012-06-27 12:34:18

2012-06-27 12:35:23

2012-06-27 12:36:28

2012-06-27 12:37:33

2012-06-27 12:38:38

檢查job的執行時間,發現也是不斷推後的,發生這種現象的原因是什麼呢?

原因是計算下次執行時間用的間隔是sysdate+1/(24*60),可能是job的啟動要時間或者是掃瞄精度的原因,計算下次執行時間時用的標準時間已經不是啟動job的時間,而是推遲幾秒,所以下次執行時間會不斷推遲,找到問題所在,解決起來也就簡單了,那就是選乙個標準時間計算下次執行時間。如果每分鐘執行一次,我們可以將當前時間擷取到分鐘作為標準時間,

即inteval 取trunc(sysdate,'mi')+1/(24*60),這樣就不會有累積效應了。看執行結果:

2012-06-27 12:42:03

2012-06-27 12:43:03

2012-06-27 12:44:03

2012-06-27 12:45:03

2012-06-27 12:46:03

2012-06-27 12:47:03

2012-06-27 12:48:03

對於不同的間隔,時間擷取可以採用不同的精度,比如每天執行一次,可以用trunc(sysdate,'dd')將時間擷取到00:00:00,如每天2:00執行,inteval 取trunc(sysdate,'dd')+2/24+1或者trunc(sysdate)+2/24+1就可以了。

1、job在執行結束之後才會更新next_date,但是計算的方法是job剛開始的時間加上interval設定的間隔。

2、如果interval的時長短於job執行的時間,作業仍然會繼續進行,只是執行間隔變為了job真實執行的時長。

3、用於計算next_date的job啟動時間總是比設定的時間推遲幾秒,原因可能是job的啟動時間或者是掃瞄精度。

4、如果job因為某些原因延遲執行了一次,就會導致下一次的執行時間也同樣順延了,如本文所描述的延遲累積。因此用正確的時間間隔就很重要。比如,我們要job在每天的凌晨2:30執行而不管上次執行到底是幾點,設定interval為trunc(sysdate)+2.5/24+1就可以了。

1、每分鐘執行

trunc(sysdate,'mi')+1/(24*60)

2、每天定時執行

例如:每天凌晨0點執行

trunc(sysdate+1)

每天凌晨1點執行

trunc(sysdate+1)+1/24

每天早上8點30分執行

trunc(sysdate+1)+(8*60+30)/(24*60)

3、每週定時執行

例如:每週一凌晨2點執行

trunc(next_day(sysdate,1))+2/24

trunc(next_day(sysdate,'星期一'))+2/24

每週二中午12點執行

trunc(next_day(sysdate,2))+12/24

trunc(next_day(sysdate,'星期二'))+12/24

4、每月定時執行

例如:每月1日凌晨0點執行

trunc(last_day(sysdate)+1)

每月1日凌晨1點執行

trunc(last_day(sysdate)+1)+1/24

5、每季度定時執行

每季度的第一天凌晨0點執行

trunc(add_months(sysdate,3),'q')

每季度的第一天凌晨2點執行

trunc(add_months(sysdate,3),'q')+2/24

每季度的最後一天的晚上11點執行

trunc(add_months(sysdate+ 2/24,3),'q')-1/24

6、每半年定時執行

例如:每年7月1日和1月1日凌晨1點執行

add_months(trunc(sysdate,'yyyy'),6)+1/24

7、每年定時執行

例如:每年1月1日凌晨2點執行

add_months(trunc(sysdate,'yyyy'),12)+2/24

Oracle定時器JOB執行時間不斷推後的問題研究

工作中我們經常用oracle的job執行一些定時任務,實踐中我們發現,設定執行時間和間隔後,每次執行的時間都會有點延遲,經過一段時間後,推遲累計的效應就相當明顯,必須要重新調整時間才能滿足要求,為什麼會出現這種現象呢?經過研究,我們發現了問題所在。下面舉例說明這個問題。建立乙個job,內容為插入系統...

關於oracle 不常用的job 執行時間設定

這段時間我一直在根據實際情況對job 進行設定,不過根據文獻廢了很大勁猜的到想要的效果 其中有兩個是特別需要注意的我分享給到家 希望對大家有用 1 每天凌晨零點積分執行 trunc sysdate 1 0 60 10 24 60 每天凌晨過10分執行job 2.每小時過幾分執行job trunc s...

abap執行時間

abap 4的程式會需要花費大量的時間執行,而且會使其它程序被迫暫停以等待當前程式執行結束。這裡提供一些建議以提高你的程式執行速度和系統荷載。1.最主要的是儘量減少i o操作,然後是記憶體占用,在再就是cpu的負載。類似對硬碟的讀寫的i o操作是最耗費時間的。如果對記憶體的操作不加以控制,可能有些時...