Postgresql

如何每 10 秒執行一次 pgAgent 作業?

  • August 14, 2019

我有一個 PostgreSQL 11.3 數據庫。我安裝了 pgAgent 來創建工作。現在我想每 10 秒執行一次我的工作,但是在 GUI 中,有可能以分鐘的精度而不是秒的精度來編寫。

re

是否可以比每分鐘更快地執行 pgAgent 創建的作業?

由於它使用的是 cron 樣式的調度定義,因此不太可能支持亞分鐘粒度,因為大多數(全部?) cron 實現都不支持。

我曾經使用 cron 比每分鐘更頻繁地執行任務的一個技巧是 cron 每分鐘呼叫一次的腳本,該腳本執行其任務,稍作睡眠,然後重複。例如每分鐘執行次數:dotask; sleep 15; dotask; sleep 15; dotask; sleep 15; dotask;. 你可以用pg_sleep做類似的事情。有一些注意事項需要注意,包括:

  1. 通過計劃配置停止任務後,您的任務可能會再執行幾次。
  2. 如果任務需要相當長的時間,您需要在睡眠時間中對此進行調整。如果花費的時間是可變的,那麼您需要比簡單的靜態睡眠呼叫更亮:對於 4/分鐘範例,您的第一次睡眠將是“15-minus-current-seconds-on-wall-clock seconds”,秒為“30 減去目前秒在掛鐘秒”。
  3. 如果任務的完成時間比您的目標時間粒度更長,您可能會遇到兩個實例試圖同時執行的潛在問題,這可能會導致鎖定問題和/或使您的數據庫陷入困境。

另一種選擇是定義多個任務,所有任務都設置為即時執行。第一個立即執行,第二個在執行實際工作之前休眠幾秒鐘,第二個休眠 *2 等。因此,對於通過 cron 每分鐘執行四次任務,您將擁有:

* *    * * *    dotask.sh
* *    * * *    sleep 15 && dotask.sh
* *    * * *    sleep 30 && dotask.sh
* *    * * *    sleep 45 && dotask.sh

cron(其中 5 *s 表示在的配置文件中“每分鐘執行一次”
) 這消除了確切的睡眠時間問題(上面的第二個問題),但可能會使多實例執行在- 曾經的問題(上面的第三個問題)更令人擔憂。這兩種選擇都有些駭人聽聞…

引用自:https://dba.stackexchange.com/questions/245296