我需要在我的数据库中插入大量(50GB 的随机数据),以便我可以使用备份应用程序检查重复数据删除率。我写了一个小程序,如下所示
这需要1个多小时。我不知道如何提高性能,以便为插入语句获得良好的吞吐量。我已将 SGA 设置为 16GB。
我是甲骨文的新手。我不知道如何设置并行度来优化我的程序以获得良好的吞吐量。请帮忙。
alter session force parallel query parallel 4;
create table table_1(
col1 varchar2(400),
-- 50 columns like this
col50 varchar2(400));
create table table_2(
col1 varchar2(400),
-- 50 columns like this
col50 varchar2(400));
create table table_3(
col1 varchar2(400),
-- 50 columns like this
col50 varchar2(400));
create table table_4(
col1 varchar2(400),
-- 50 columns like this
col50 varchar2(400));
我的插入脚本:
Declare
rows_inserted number := 0;
Begin
Loop
Begin
INSERT INTO table_1(COL1, ..COL50)
VALUES(dbms_random.string('L', 400),..for all 50 values);
INSERT INTO table_2(COL1, ..COL50)
VALUES(dbms_random.string('L', 400),..for all 50 values);
INSERT INTO table_3(COL1, ..COL50)
VALUES(dbms_random.string('L', 400),..for all 50 values);
INSERT INTO table_4(COL1, ..COL50)
VALUES(dbms_random.string('L', 400),..for all 50 values);
--Only increment counter when no duplicate exception
rows_inserted := rows_inserted + 1;
--Exception When DUP_VAL_ON_INDEX Then Null;
End;
exit when rows_inserted = 10000;
End loop;
commit;
End;
/
我已经在安装在 rhel 7 VM 上的 Oracle12c 上尝试过这个过程。Vm 有 32 GB 内存和 20 GB 交换内存和 16 个 vcpus。
它需要1个多小时并且仍在运行。如何实现并行性并优化上述过程以获得良好的吞吐率?