1

DB (Oracle バージョン 10g) に興味深い問題があります。

との 2 つのインスタンスがありINS1ますINS2。スキーマに 2 つのプロシージャを含むパッケージがあり、インスタンスとインスタンスの両方にいくつかのパラメータを指定してスキーマSC1から呼び出されます。SC2INS1INS2

最初のプロシージャは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か?

4

1 に答える 1