增加最大服务器内存

时间:2017-03-08 00:09:21

标签: sql sql-server memory memory-management out-of-memory

我是新手,所以请耐心等待。

之前我曾尝试使用批量插入导入非常大的CSV文件,而不使用任何batchsize,kilobytes_per_batch或row_per_batch参数。然后我发现了以下错误:

执行批处理时发生错误。错误消息是:抛出了类型'System.OutOfMemoryException'的异常。

我通过拆分CSV并将其导入块来解决此问题。结果我最终在SQL 2016 Server Management Studio中有两个单独的表。这两个表包含已拆分的CSV值。因此,它们具有相同的列,列大小和数据类型。我决定使用union all查询来组合它们。当我这样做时,错误又回来了。然后我决定将最大服务器内存增加到5 GB,我认为应该绰绰有余。但是,当我重新尝试联合所有查询时,错误仍然会再次出现。我的电脑总共有8 GB的RAM。我使用的是Windows 10 64位和基于x64的处理器。

表的属性如下所示:

CREATE TABLE [dbo].[indivs16] (
    [Cycle] [char] (4) NOT NULL,
    [FECTransID] [char] (19) NOT NULL,
    [ContribID] [char] (12) NULL,
    [Contrib] [varchar] (50) NULL,
    [RecipID] [char] (9) NULL,
    [Orgname] [varchar] (50) NULL,
    [UltOrg] [varchar] (50) NULL,
    [RealCode] [char] (5) NULL,
    [Date] [datetime] NULL,
    [Amount] [int] NULL,
    [Street] [char] (3) NULL,
    [City] [varchar] (30) NULL,
    [State] [char] (2) NULL,
    [Zip] [char] (5) NULL,
    [Recipcode] [char] (2) NULL,
    [Type] [char] (3) NULL,
    [CmteID] [char] (9) NULL,
    [OtherID] [char] (9) NULL,
    [Gender] [char] (1) NULL,
    [Microfilm] [varchar] (18) NULL,
    [Occupation] [varchar] (38) NULL,
    [Employer] [varchar] (38) NULL,
    [Source] [char] (5) NULL
) ON [PRIMARY]

这是我为联盟运行的查询:

SELECT * FROM Indivs16000
UNION ALL
SELECT * FROM Indivs16001

以下是我如何查询的截图:

pic

2 个答案:

答案 0 :(得分:0)

该错误看起来像是.NET错误,而不是SQL Server错误。

你好吗?如果您使用System.Data.DataTable查询,则客户端内存不足,因为它将所有内容加载到内存中。

您应该使用IDataReader来查询数据,这些数据将流式传输数据" firehose"您一次只能读取数据记录的样式,因此您一次只能将几千条记录提取到客户端内存中 - 无论您的表有多大或您的SELECT语句有多少记录正在回归。

答案 1 :(得分:0)

如果您使用了导入/导出实用程序,那将非常简单,即使使用批量插入,您也可以使用批处理并插入到同一个表中。然而,它不是世界末日,你可以再试一次。

相关问题