0

DataReader を使用して、大きなテーブル (1.8 GB、2000 万件のレコード) から行を取得しています。

SQL Server (2008 R2) は大量のメモリを消費し、(場合によっては) このクエリに耐えられません。おそらく結果全体をメモリに保持し、このバッファからクライアントに行を返します。

選択は非常に単純です-単純なWHERE条件でテーブルからすべての行を返すだけで、列に格納されている日付は実際の日付よりも小さいです。列にブロブや文字列はありません。

メモリ使用量の原因についての私の推定は正しいですか? そして、この状況で何ができるでしょうか - すべての行が必要です。クエリは高速である必要はありませんが、メモリ効率は高くありません。

ありがとう

更新された情報 - 選択はストアド プロシージャにあります。コード:

CREATE PROCEDURE [get_current_records]
with recompile
AS
BEGIN

declare @currentDate datetime = getdate()
SELECT 
   [id]
  , name
  , description
  , number
  ,[valid_from]
  ,[valid_to]
  from ui_parcela
  where valid_from < @currentDate and (valid_to is null or valid_to > @currentDate )
END
4

2 に答える 2

0

サーバーのメモリが不足している場合は、SQL クエリを確認する必要があるようです。正しく索引付けされていますか?

SQL 実行計画をチェックして、コストがかかるものを確認します。

于 2013-10-20T20:43:36.643 に答える
0

それらの行で何をしているのかを知ることは重要ですか? それらをメモリに保存していますか、それとも各行を使用してメモリから解放できますか

したがって、非同期リーダーを使用することをお勧めします

于 2013-10-20T20:35:35.297 に答える