设置执行PL/SQL脚本的最长时间
我正在尝试对数据库中的一些表进行性能负载测试。我们使用的方法基本上是一个循环insert语句的脚本。但是,我们想知道系统一分钟可以处理多少次插入。目前,我的脚本如下所示:设置执行PL/SQL脚本的最长时间,sql,oracle,testing,plsql,Sql,Oracle,Testing,Plsql,我正在尝试对数据库中的一些表进行性能负载测试。我们使用的方法基本上是一个循环insert语句的脚本。但是,我们想知道系统一分钟可以处理多少次插入。目前,我的脚本如下所示: set serveroutput on variable n number exec :n := dbms_utility.get_time begin for i in 1..5000 loop insert into aoms.buyers (user_id,buyer_cd,buyer_eng_nm,reg_dt) v
set serveroutput on
variable n number
exec :n := dbms_utility.get_time
begin
for i in 1..5000 loop
insert into aoms.buyers (user_id,buyer_cd,buyer_eng_nm,reg_dt)
values(dbms_random.string('L',8),'LT0','LT04','LT05');
end loop;
end;
/
exec :n := (dbms_utility.get_time - :n)/100
exec dbms_output.put_line(:n)
我希望在60秒内插入尽可能多的记录,而不是在脚本上设置计时器。如何做到这一点?此外,如果我想让这个脚本在本质上更具动态性,并且能够在具有不同结构(列名、主键)的不同表上使用它,我将如何进行呢。可能吗?谢谢。这将运行60秒:
set serveroutput on
variable n number
exec :n := dbms_utility.get_time + (6 * 100);
declare
l_cnt NUMBER := 0;
begin
loop
insert into aoms.buyers (user_id,buyer_cd,buyer_eng_nm,reg_dt)
values(dbms_random.string('L',8),'LT0','LT04','LT05');
l_cnt := l_cnt + SQL%ROWCOUNT;
exit when dbms_utility.get_time > :n;
end loop;
dbms_output.put_line('Rows inserted: ' || l_cnt);
end;
/
你需要确保这是一个公平的测试。例如,DBMS\u RANDOM.STRING()
需要时间。调用DBMS\u实用程序
需要时间。您可能希望将其与DBMS\u HPROF
结合起来,以了解插入所花费的确切时间
另一方面,您的生产系统可能不仅仅是插入
为了使事情更通用,只需将
插入AOMS.bullers…
替换为您正在运行的任何测试。我不会让它比那更普通。例如,假设您将insert替换为一个函数调用,该函数调用接受“table_name”作为参数,然后查找列以及每个列的数据类型,并为每个列计算出良好的测试数据。所有这些工作(在我看来)可能会扭曲你的测试结果。非常感谢Matthew,这正是我想要的。还有一个问题。而不是独立的select语句。如何输出插入的行数?可能是dbms输出?我更新了答案以输出插入的行数这里没有提交:P