它是否会占用CPU,而它正在睡觉时#34;或其他一些不良的副作用?
是的 - 偏执,但使用一些关键代码并且不想要任何陷阱。
答案 0 :(得分:3)
DBMS_LOCK.SLEEP
不消耗任何重要资源,使用起来非常安全。
我已多次使用它,从未遇到任何问题。以下测试会产生大量的睡眠工作,但不会造成任何问题。
要测试SLEEP
功能,请创建大量同时睡眠的作业。
首先,确保数据库可以支持大量作业。有几个参数可能会限制这一点。检查以下参数:
select name, value
from v$parameter
where name in ('job_queue_processes', 'processes', 'sessions')
创建等待30秒的1000个预定作业。
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%。