0

SQL SERVER 2008 R2でパフォーマンスの問題がありOPENQUERYます。

select 
*
from openquery([LINKEDSERVER],'
            SELECT
            COLUMN1,COLUMN2,COLUMN3...(45 columns at all)
            FROM ORACLE_TABLE
            WHERE X>Y')

5 分を過ぎた応答時間 (はい、5 分)。しかし、selectOracle 側で 1 つの列のみを使用して同じことを実行すると、次のようになります。

select 
*
from openquery([SERVER],'
            SELECT
            COLUMN1
            FROM ORACLE_TABLE
            WHERE X>Y')

応答時間は 17 秒 (10.000 レコード) です。

何か案は?

4

1 に答える 1

1

両側の待機イベントは何ですか? クエリ プランとは

プロセスはネットワーク トラフィックを待機していますか? その場合、おそらく、45 列のデータには、ネットワークを介して送信するデータが大幅に多くなります。45 倍のデータがあり、高速なケースで経過した 17 秒のうち 7 秒がネットワーク トラフィックに費やされると仮定すると、データの列が 1 列から 45 列になると、ネットワーク待機イベントの量が 7 秒増加します。 * 44 列 = 308 秒。したがって、これ以上の情報がなければ、ネットワーク経由で送信するデータの量を 45 倍に増やして 17 秒から 5 分に短縮することは、少なくとも潜在的には妥当と思われます。

もちろん、これがcolumn1大きな画像であり、他の 44 列がCHAR(1)それぞれ 1 バイトを消費する列である場合、ネットワーク トラフィックの増加はパフォーマンスの変化の合理的な説明にはなりません。

column1インデックスされていますか?その場合、45 列すべてを取得する場合は、おそらく非常に異なる計画があります。おそらく、最初のクエリ プランは、Oracle が小さなカバリング インデックスをスキャンする必要があることを示していますが、2 番目のプランは、はるかにコストのかかるテーブル スキャンを実行する必要があることを示しています。

于 2013-02-20T19:59:07.117 に答える