在存储过程中休眠随机时间

问题描述 投票:0回答:1
我们正在使用的供应商应用程序利用分布在多台计算机上的多个进程(不是线程),每个进程对应一个可用的处理核心。当要求进行一批计算时,应用程序会在这些引擎之间分配负载,然后引擎会转到数据库以获取执行计算所需的其他详细信息。

当我们添加更多的核心和引擎时,同时涌入数据库会导致负载峰值如此之大,一些引擎开始出现ORA-12170: TNS:Connect timeout occurred

错误,这会导致它们崩溃(我知道,它不应该,但是我们无法修复供应商的代码)。例如,引擎数为1386时,大约有300个引擎转储核心,因为16核Oracle无法应对...

没有官方方法可以使应用程序
交错

这些引擎初始化...

但是每个引擎做的第一件事就是调用相同的存储过程——它更新同一个表——我想知道,我是否可以改变它来执行惊人的操作:使每个引擎“睡眠”以获得随机数毫秒。

这个 SQL 片段会是什么样子?我们的服务器运行 Oracle-19...

使用

DBMS_RANDOM

生成随机值,然后
oracle-database stored-procedures random sleep oracle
1个回答
0
投票
休眠那么多秒:

DECLARE
  seconds NUMBER := DBMS_RANDOM.VALUE(1, 20);
BEGIN
  DBMS_LOCK.SLEEP( seconds );
END;
/
	

© www.soinside.com 2019 - 2024. All rights reserved.