SQL Server批量插入物理内存问题

我有一个脚本执行15个批量插入操作到一个SQL Server数据库中的顺序,全部基于下面的一个:

BULK INSERT M_USERS FROM '\\spath\users.txt' WITH ( BATCHSIZE = 1000, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE='\\spath\users.err' ) GO 

这15个文本文件大小不一。 一些有不到5000行,而最大有超过5,000,000行。 我正在12 GB内存和24 GB页面文件的服务器上运行脚本。 一旦启动,我注意到该服务器上的物理内存使用量稳步增加,直到接近100%。 即使脚本完成(或由于内存不足而失败),内存使用率也不会下降。 看来Sql Server从不释放它用来执行批量插入的内存资源。

有谁知道我是否可以通过修改脚本解决这个问题,或者这是SQL Server的问题吗?

编辑:最终我得到错误“资源池内部没有足够的系统内存”运行此查询。“ 一切都失败了

这是devise。 除非你限制了SQL Server可以访问的内存数量,否则会占用尽可能多的内存。 这通常不是一件坏事。 SQL有自己的内部操作系统,如线程池和内存pipe理,是非常擅长这些事情。 添加这么多的数据很可能导致SQL将大量的数据存储在内存中的数据caching中(以及其他一些内容)。

如果SQL Server是你的机器上唯一运行的东西,那么一般的规则是让它有1.5 / 2GB的内存,为服务器操作系统保留。 在SQL Server上抛出的内存越多,就越快乐。

编辑对你的编辑:
你一定会想要限制SQL Server将使用的内存。 我不能肯定地说你正在使用多less字节,但是你可能导致你的服务器交换SQL,这是个坏消息。

在SQL Serverpipe理工作室的对象资源pipe理器中:

  • 右键单击您的服务器实例
  • 点击左侧导航列表中的Memory(内存)
  • 将最大服务器内存(以MB为单位)设置为10000到15000(10-15 GB)之间的值。
  • 点击确定

或者,你也可以在查询窗口中运行这个:

 sp_configure 'max server memory (MB)',10000 GO RECONFIGURE GO 

10000个10GB的SQL内存。