我创建了一个非常基本的SQL表,如下所示
CREATE TABLE [dbo].[TickData](
[Date] [varchar](12) NULL,
[Time] [varchar](12) NOT NULL,
[Symbol] [varchar](12) NOT NULL,
[Side] [varchar](2) NOT NULL,
[Depth] [varchar](2) NOT NULL,
[Quote] [varchar](12) NOT NULL,
[Size] [varchar](18) NOT NULL
) ON [PRIMARY]
然后,我执行了3 Gig批量插入
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
然后SQL Server的RAM使用量激增,吞噬了约30Go的RAM:
我更倾向于认为这是一种异常行为,可以采取措施避免这种情况。
编辑:
好的,这似乎是默认行为。很公平。
但是,为什么在大容量插入完成后很长时间没有释放内存?
几个额外的考虑因素:
关于SQL Server被操作系统“告知”时释放内存的评论,我在24核32 Gb Xeon Server上的动手经验证明这是不精确的:一旦内存占用过多的BCP提取结束了我的数据处理应用程序中有一个.Net实例池,需要处理提取的数据,它们被阻塞/争斗以共享剩余内存以尝试执行其工作,这比打开SQL Server时花费的时间更长关闭,内存可供所有应用程序共享。我必须停止SQL Server代理,以使一切顺利进行,并防止因Articiallt导致OutOfMemmroy异常而使应用程序崩溃。对于人为的残酷内存封顶/限制,如果有可用内存,为什么不使用它?理想情况下,宁愿将其设置为适应可用的内容,而不仅仅是“随机”限制。但是我想这是设计使然,因此在最后一点上案例不公开。