1

次のスクリプトがあります。

SELECT 
    DEPT.F03 AS F03, DEPT.F238 AS F238, SDP.F04 AS F04, SDP.F1022 AS F1022, 
    CAT.F17 AS F17, CAT.F1023 AS F1023, CAT.F1946 AS F1946 
FROM 
    DEPT_TAB DEPT 
LEFT OUTER JOIN 
    SDP_TAB SDP ON SDP.F03 = DEPT.F03, 
CAT_TAB CAT 
ORDER BY 
    DEPT.F03

テーブルは巨大です。SQL Server でスクリプトを直接実行すると、実行に約 4 分かかりますが、サード パーティ プログラム (Delphi ベースの SMS LOC) で実行すると、エラーが発生します。

<msg> out of memory</msg> <sql> the code </sql>

実行するスクリプトを軽くする方法はありますか? または、誰かが同じ問題を抱えていて、何とか解決しましたか?

4

3 に答える 3

3

ROBUST PLANクエリ オプティマイザーがトラックを失い、ハードウェアが処理できない方法で解決しようとしたクエリで、クエリ ヒントに頼らなければならなかったことを覚えています。

=> http://technet.microsoft.com/en-us/library/ms181714.aspx

しかし、それがなぜある「テクノロジー」では機能し、別の「テクノロジー」では機能しないのか、私にはよくわかりません。繰り返しますが、エラー メッセージは SQL からではなく、出力を収集し、「理想的ではない」方法で収集するサードパーティ プログラムからのものである可能性があります。

于 2013-10-22T20:07:40.547 に答える
1

ユーザー編集画面と基礎となるデータ呼び出しにページングを追加することを検討してください。一度にすべての行を表示する必要はありませんが、要求に応じてユーザーが利用できます。

これにより、パフォーマンスの問題の多くが軽減されます。

于 2013-10-22T21:37:16.340 に答える
0

私は、700 万行以上の個別の T-SQL コード行をバッチで追加しなければならないプロジェクトを持っていました (新しい SEQUENCE コマンドをプログラムで活用する方法がわかりませんでした)。問題は、VM で使用できるメモリの量が限られていることでした (この VM に最大量のメモリが割り当てられました)。T-SQL コードの行数が多いため、最初に、サーバーがクラッシュするまでに何行かかるかをテストする必要がありました。なんらかの理由で、SQL (2012) は、私のような大規模なバッチ ジョブ (約 12 GB のメモリについて話している) に使用するメモリを解放しないため、100 万行ごとにサーバーを再起動する必要がありました。これは、プロジェクトのリソースが限られている場合に必要になることがあります。

于 2013-10-22T21:33:54.193 に答える