2

我创建了一组 100k 插入查询来在多个 oracle 表中生成数据以进行性能测试。执行此操作的最佳方法是什么?

过去,我尝试过 Oracle SQL developer 和 Toad 等工具。但是不确定它是否可以处理这么大的容量。

简单的插入语句,如 -

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS) 
VALUES (5000001, 63, 1, '91111111', 'N/A', 107);
4

1 回答 1

4

用 SQL 语句插入 100,000 行就可以了。这不是大量的数据,并且有一些简单的技巧可以帮助您将运行时间缩短到几秒钟。

首先,确保您的工具没有为每个语句显示某些内容。将语句复制并粘贴到工作表窗口中会非常慢。但是将语句保存到 SQL*Plus 脚本中,然后运行该脚本会很快。如果可能,请使用真正的 SQL*Plus 客户端。该程序几乎可以在任何系统上使用,并且擅长运行小脚本。

如果您必须使用 SQL Developer,请将 100K 语句保存在文本文件中,然后将其作为脚本运行 (F5)。这个方法在我的电脑上花了 45 秒。

set feedback off
@C:\temp\test1.sql

其次,批处理 SQL 语句以消除开销。您不必对所有这些进行批处理,一次批处理 100 条语句就足以减少 99% 的开销。例如,生成一千条这样的语句:

INSERT INTO SELLING_CODE (SELC_ID, VALC_ID, PROD_ID, SELC_CODE, SELC_MASK, VALC_ID_STATUS)
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual union all
...
select 5000001, 63, 1, '91111111', 'N/A', 107 from dual;

将其保存在一个文本文件中,在 SQL Developer (F5) 中以相同的方式运行它。这个方法在我的电脑上花了 4 秒钟。

set feedback off
@C:\temp\test1.sql

如果你不能显着改变INSERT语句的格式,你可以简单地在每 100 行之间添加一个BEGINand 。END; /这将一次将 100 条语句传递给服务器,并显着减少网络开销。

要获得更快的速度,请在常规 SQL*Plus 中运行脚本。在我的 PC 上,加载 100,000 行只需要 2 秒。

对于这样的中型数据,保持 SQL 语句的便利性是有帮助的。通过一些技巧,您可以获得与二进制格式几乎相同的性能。

于 2019-05-14T03:14:02.603 回答