DB (Oracle バージョン 10g) に興味深い問題があります。
との 2 つのインスタンスがありINS1
ますINS2
。スキーマに 2 つのプロシージャを含むパッケージがあり、インスタンスとインスタンスの両方にいくつかのパラメータを指定してスキーマSC1
から呼び出されます。SC2
INS1
INS2
最初のプロシージャはGTT1
、で作成されたグローバル一時テーブルから削除しon commit preserve rows
、次に同じものに挿入します。
proc1(parameter_in) as
begin
delete from gtt1;
insert into gtt1
from <other_table_1>
where parameter=parameter_in;
end;
proc2(parameter_in) as
begin
insert into <table_1>
select * from gtt1, <other_table_1>
where <join 2 tables>
and parameter=parameter_in;
-- again insert in same table with records not in <other_table_1>
-- as they were deleted during refresh.
insert into <table_1>
select * from gtt1
where not exists
(row from <other_table_1>);
delete from gtt1;
end;
これらが次のようにスキーマからSC2
一緒に呼び出される場合:
begin
sc1.pkg1.proc1(parameter_in);
sc1.pkg1.proc2(parameter_in);
end;
/
そのINS1
上で10秒で実行されています。そのINS2
上で3分かかります。
これらの手順を個別に実行すると、次のようINS2
に 5 秒で実行されます。
begin
sc1.pkg1.proc1(parameter_in);
end;
/
begin
sc1.pkg1.proc2(parameter_in);
end;
/
テーブル内の統計とデータが<other_table_1>
両方のインスタンスで同じであることを確認しました。
インスタンスに時間がかかる理由はありますINS2
か?