You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle 19c存储过程中实现随机休眠以错开引擎初始化

解决Oracle 19c下多进程并发初始化的连接超时问题

实现思路

借助每个引擎启动后必调用的存储过程,在原有业务逻辑前加入随机毫秒级休眠,分散大量并发请求的峰值,从而缓解数据库负载,避免ORA-12170: TNS:Connect timeout occurred错误。

修改后的存储过程代码片段

Oracle 19c的DBMS_LOCK.SLEEP支持接收小数参数(单位为秒),可通过生成随机数实现毫秒级休眠:

CREATE OR REPLACE PROCEDURE your_target_procedure
IS
    -- 自定义随机休眠的时间范围,示例为0到5秒(可按需调整)
    v_random_delay NUMBER;
BEGIN
    -- 生成0到5之间的随机小数,对应0-5000毫秒的休眠时长
    v_random_delay := DBMS_RANDOM.VALUE(low => 0, high => 5);
    
    -- 执行休眠操作
    DBMS_LOCK.SLEEP(v_random_delay);
    
    -- ↓↓↓ 以下为原存储过程的业务逻辑,保持不变 ↓↓↓
    -- UPDATE your_target_table SET ... WHERE ...;
    -- 原有更新表的代码
    -- ↑↑↑ 以上为原存储过程的业务逻辑,保持不变 ↑↑↑
END;
/

关键注意事项

  • 权限配置:确保执行该存储过程的数据库用户拥有DBMS_LOCK包的执行权限,可通过以下语句授权:
    GRANT EXECUTE ON DBMS_LOCK TO your_engine_user;
    
  • 休眠范围调整:根据实际引擎数量调整DBMS_RANDOM.VALUE的参数。比如面对1300+引擎的场景,可将上限调至10秒,确保足够的请求分散效果。
  • 逻辑顺序:休眠代码必须放在原业务逻辑之前,避免干扰原有更新表的功能。

内容的提问来源于stack exchange,提问作者Mikhail T.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:27:04