【问题标题】:Oracle DBMS_ALERT Waitany DelayOracle DBMS_ALERT Waitany 延迟
【发布时间】:2011-03-09 19:41:37
【问题描述】:

我有一份工作,它将提交 n 个其他工作。我已经设置了我的 pl/sql 程序来使用 dbms_alert.register 注册 n 个作业。这些作业中的每一个都将发送一个 dbms_alert.signal。我在信号发出后立即发出了提交。

这是问题所在,当我的程序到达 dbms_alert.waitany 时,将在 5 秒内返回 not 信号(几乎每次都是如此)。该过程将提交另外 n 个作业,并且再次等待大约 5 秒不会收到任何信号。

我进行了研究,发现 dbms_alert.waitany 的默认轮询间隔为 5 秒。这可以通过使用 dbms_alert.set_defaults 过程进行更改。我已经这样做了,但没有任何效果。我用 dbms_alert.set_defaults(1) 乱扔了我的代码(也尝试了 600),试图在 5 秒内获得信号,但没有任何效果。

谁能帮帮我?

谢谢

【问题讨论】:

  • 我认为,您只需要在致电 waitany 之前致电 set_defaults。在线文档和其他来源对此过程非常不清楚 - “灵敏度”参数是以秒为单位还是以 hsecs 为单位不清楚。
  • 另见:“WAITANY 调用使用轮询循环来检测警报。...轮询循环以 1 秒的间隔开始,并以指数方式增加到 30 秒。” - 没有提到 set_defaults。

标签: oracle asynchronous plsql jobs


【解决方案1】:

您要查找的是已弃用的初始化参数_job_queue_interval。它仍然可以设置为

alter system set "_job_queue_interval"=5 scope=spfile;

...并重新启动数据库。

DBMS_ALERT.SET_DEFAULTS 过程设置轮询间隔以防需要轮询循环(这种情况非常少见)。请参阅Oracle 10g docs 了解何时进行轮询(这种情况非常罕见)。

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2012-04-28
    • 2012-02-15
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多