PL / SQL函数dbms_lock.sleep安全吗?

时间:2016-12-06 22:09:50

标签: oracle sleep

它是否会占用CPU,而它正在睡觉时#34;或其他一些不良的副作用?

是的 - 偏执,但使用一些关键代码并且不想要任何陷阱。

1 个答案:

答案 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%。