2
A
回答
3
DBMS_LOCK.SLEEP
不消耗任何重要資源,使用起來非常安全。
我已經多次使用過它,從未遇到任何問題。下面的測試會創建大量的睡眠工作,但不會導致任何問題。
要測試SLEEP
功能,創造了巨大的就業量都睡在同一時間。
首先,確保數據庫可以支持大量的作業。有幾個參數可能會限制這一點。檢查以下參數:
select name, value
from v$parameter
where name in ('job_queue_processes', 'processes', 'sessions')
創建1000個等待30秒的預定作業。
begin
for i in 1 .. 1000 loop
dbms_scheduler.create_job(
job_name => 'JOB_'||i,
job_type => 'PLSQL_BLOCK',
start_date => systimestamp,
enabled => true,
job_action => 'begin dbms_lock.sleep(30); end;'
);
end loop;
end;
/
現在看到有多少作業正在運行:
select count(*) from gv$session where schemaname = user;
select count(*) from dba_scheduler_running_jobs where owner = user;
在我的桌面上我只得到239點的工作。由於原始參數不是1000,但我認爲239仍然是一個很好的「大」值。
即使在所有這些活動中,我都沒有注意到任何性能問題,Oracle使用的CPU不到1%。
+1
很好的答案。唯一的事情是,在睡覺之前不應該有任何交易或鎖定,否則可能會阻止某些東西。 –
相關問題
- 1. 是否是setlocale線程安全函數?
- 2. PHP函數error_log()是否安全使用?
- 3. 內部函數聲明是否安全?
- 4. 刪除history.back()函數是否安全?
- 5. 函數`arc4random`系列是否安全?
- 6. Python 3的input()函數是否安全?
- 7. 使用「不安全」線程函數是否安全?
- 8. ConcurrentHashMap是否完全安全?
- 9. C++模板函數是否是線程安全的?
- 10. Context.MODE_PRIVATE是否安全?
- 11. const_cast是否安全?
- 12. BrowserID是否安全?
- 13. Locale.setDefault()是否安全?
- 14. Titanium.App.Properties是否安全
- 15. AfxBeginThread是否安全?
- 16. signed_request是否安全?
- 17. PhoneGap是否安全?
- 18. Redux是否安全?
- 19. session_set_cookie_params是否安全?
- 20. 將「太多」參數傳遞給外部函數是否安全?
- 21. 使用函數訪問數據庫值是否安全?
- 22. DBMS_LOCK.SLEEP vs UNIX sleep
- 23. PLSQL函數聲明
- 24. PLSQL中的(+)函數
- 25. 將nullptr分配給函數指針變量是否安全?
- 26. .NET中的這個函數是否安全共享?
- 27. 使用註釋來解釋Javascript中的函數是否「安全」?
- 28. MSVC的時間函數是否線程安全?
- 29. 是否安全的記錄這在構造函數中的值
- 30. 是否有一個安全的「mkdir()」類似的函數?
它會做空閒的等待。不過,「不良副作用」有點寬泛。對於線程何時被喚醒有一個相當大的不確定性 - 例如,如果你睡了幾秒鐘,你可能會在十分之一秒後醒來。如果你睡了幾秒鐘,就不需要擔心了。 –
在我的情況下,精度並不重要。我正在處理一個系統超載另一個系統導致其崩潰的情況。我正在尋找一種方法來優雅地「扼殺」在目標系統上拋出多少東西。睡眠似乎是做這件事的理想方式。 – Jeff
這可能是完全合理的。根據問題的範圍,您可能需要一個進程可以將消息排入隊列的異步隊列,而另一個進程(或多個進程)可以稍後再出隊。這樣,消費者流程就可以自我調節,而不需要生產者知道如何節制。 –