1
私は65000の挿入文で構成される以下のようなSQLスクリプトを用意しています。私は(USR/pwdの@のDBの@のscript.sql SQLPLUS)私のコマンドプロンプトを通じてSQLPLUSでこのスクリプトを実行するとOracleに文を挿入する
SET DEFINE OFF;
SET AUTOCOMMIT 1000;
SET FEEDBACK OFF;
Insert into table (col1,..col20) values ('val1',...'val2');
Insert into table (col1,..col20) values ('val1',...'val2');
...
...
それが完了するために、私のために約4時間かかりました。
しかし、同じスクリプトを実行してパテントに接続してサーバーに接続し、sqlplus(sqlplus usr/pwd @ DB @ script.sql)でスクリプトを実行すると、完了までにわずか1分かかりました。
あなたは私が、この差は
ネットワークレイテンシのように聞こえますが、別々のステートメントはすべてサーバーへの個別のラウンドトリップを持ち、非効率的です。しかし、その違いは少し極端に聞こえます。あなたのクライアントはどこにありますか - LAN上にありますか? WAN? VPN経由でインターネットにアクセスするには?あなたがそれをブロックにして、 'begin ... end;'を挿入のリスト全体に置くと、リモートバージョンはどれくらいの時間を取るのですか? (また、なぜ最初から65000個の挿入を行っているのですか?その値はどこから来ますか?) –
私はbeginステートメントを囲んで、それを(私のコマンドプロンプトから)4時間実行します。私はインターネット経由で(私のコマンドプロンプトとパテの両方で)サーバーを接続しています。私は、これらの値を1つの上位envから開発envにテーブルに挿入したいと考えました。 SQL LOADERのような他の方法もありますが、上記の2つの実行の違いを理解したいと思います。 –
私は時差の理由について本当に分かりません。私が考えることの1つは、あなたがパテを介してデータベースにアクセスするときに、dbサーバーにログインすることです。これにより、ネットワークの待ち時間が短縮されます(Alexが述べたように)。 – Invalidsearch