2009-05-27 8 views
3

40個のバインド変数を列の値として使用するスロー・インサート文に問題があります。 WANリンク経由で数秒間実行され、ネットワークアナライザーを使用するまで問題を解決できませんでした。この準備されたクエリを実行するたびに、クライアントとサーバー間で120パケット以上を交換する必要がありました。より効率的に実行するためにできることは何ですか?WAN経由で多くのバインド変数を持つoracle insertが非常に遅い

同じホストから実際のパラメータ(バインド変数なし)を実行すると、数十ミリ秒で完了します。パラメータには何も特別なものはなく、短いvarcharsと数値しかありません。

私たちはODACでDelphi 6を使用していますが、ODACとOracleクライアントのさまざまなバージョンを無償で試しました。サーバー側では、Oracle 10と11の両方を試しました。

答えて

1

TNSは、WANよりうまく機能するようには設計されていません。

可能であれば、より効率的なHTTPのような他のネットワーク層を使用するようにアプリケーションを書き直してください。

例えば、Oracle HTTP Serverを使用して行うことができます。

+0

LAN上でも、個々のバインドごとにサーバーに移動しないようにするオプションがありますが、 。もちろん、エラー処理のセマンティクスは少し違いますが、まだまだ... – Thilo

+0

実際には、すべてのバインドがサーバーに送られると、バッチクエリのアイデアは完全に否定されません(ここで、主なパフォーマンスの改善はサーバー往復)? – Thilo

+0

ネットワークスタックを完全に変更することはできません。挿入されたデータはテキストファイルから発生するため、代わりにSQLローダーを使用することを検討しています。しかし、コードを壊さずにパフォーマンスを向上させることができれば、もっと幸せになれます。 – Juraj

0

External Tablesを見ましたか? SQL Loaderの必要性を置き換えます Oracle 9i以上が必要です

+0

しかし、ネットワーク経由で外部テーブルにアクセスすることはできません(ネットワークファイルシステムや共有、リモートデスクトップなどの複雑な問題を使用する場合のみ)。 – Juraj

+0

WAN経由でDBサーバーにデータを移動してアップロードできますか? –

+0

はい、どうやってデータを移動しますか?サーバーとすべてのクライアントの両方で、まずリモートデスクトップまたはファイル共有を構成する必要があります。あなたはsys/network administratorとして働いたことがありますか?そのようなことが何を意味するのか分かりますか?サーバー上ではほとんど変更が必要なく、クライアント上で追加の構成が必要ないため、sqlldr.exe +更新されたアプリケーションを全員に配布するだけで、はるかに簡単です。 実際には、この機能が必要なユーザーはほんのわずかで、既にリモートデスクトップを使用しているため、最終的なソリューションを延期することができて幸運です。 – Juraj

関連する問題