У меня есть требование вставить огромные (50 ГБ случайных данных) в мою базу данных, чтобы я мог использовать приложение резервного копирования для проверки степени дедупликации.Я написал небольшую процедуру, как показано ниже:
Это занимает более 1 часа.Я не знаю, как улучшить производительность, чтобы получить хорошую пропускную способность для операторов вставки.Я установил SGA как 16 ГБ.
Я новичок в Oracle.Я не знаю, как установить параллелизм для оптимизации моей процедуры, чтобы получить хорошую пропускную способность.Пожалуйста, помогите.
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;
/
Я пробовал эту процедуру на Oracle12c, который установлен на виртуальной машине rhel 7.Vm имеет 32 ГБ памяти и 20 ГБ подкачки памяти и 16 vcpus.
Это занимает более 1 часа и все еще работает.Как реализовать параллелизм и оптимизировать описанную выше процедуру, чтобы получить хорошую пропускную способность?