2011-02-28 20 views
2

我有2個調度程序作業,運行不同的調度程序。每個調度程序都運行相同的過程,但具有不同的參數。調度程序作業,從站pid和睡眠

程序中有一個dbms_lock.sleep(N);

我注意到當1個調度程序作業要睡覺時 - 另一個人也會睡覺。直到第一個醒來。

在我已經找到了調度日誌,這兩個調度JONS有不同session id,但相同Slave PID

這是一個問題嗎?如果是這樣 - 如何用不同的slave pids運行作業?

UPD

更新MAX_JOB_SLAVE_PROCESSES20。現在奴隸pid是不同的,但dehaviour沒有改變。

回答

1

如果您在* nix平臺上,則PID指向正在執行相關代碼的shadow * nix進程。通常對於專用服務器,每個會話都會有自己的影子進程。在共享服務器中,您將擁有一個* nix進程池,會話將從池中選擇一個可用的進程。如果沒有可用的,並且共享服務器進程的最大數量已經開始,則會話等待。

類似的情況適用於DBMS_JOB,最大值由JOB_QUEUE_PROCESSES和DBMS_SCHEDULER(MAX_JOB_SLAVE_PROCESSES)設置。它可能會選擇少開始。

注意:它正在執行DBMS_LOCK.SLEEP時,仍處於代碼路徑中,並且仍在「運行」。只是沒有做任何有用的事。

PS。不確定PID如何在Windows上工作,它在單個進程中作爲線程運行,而不是作爲多個不同的進程運行。

+0

好吧,如果相同的slave pid意味着所有線程都會睡眠,無論哪個叫做「sleep」 - 那麼如何解決它? (目標os是solaris) – zerkms