选择多行时出现内存问题

时间:2013-10-20 20:18:04

标签: c# sql-server sqldatareader

我正在使用DataReader从大表(1.8 GB,20百万条记录)中检索行。

SQL Server(2008 R2)消耗大量内存,并且(有时)无法在此查询中存活。 它可能将整个结果保存在内存中,并将行从此缓冲区返回给客户端。

选择非常简单 - 它只返回表中的所有行,其中包含简单的where条件,存储在列中的日期小于实际日期。列中没有blob或字符串。

我对估计内存使用的原因是否正确?在这种情况下我能做些什么 - 我需要所有行,查询不一定要快,但内存效率要高。

由于

更新信息 - 选择在存储过程中。代码:

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

2 个答案:

答案 0 :(得分:0)

了解你对这些行做了什么很重要? 您是将它们存储在内存中,还是可以使用每一行并从内存中释放它们

所以我建议您尝试using async reader

答案 1 :(得分:0)

如果服务器内存不足,您需要查看SQL查询。你索引正确吗?

检查SQL执行计划,看看哪些是昂贵的。