我正在具有16 GB RAM的新服务器中使用SQL Server 2012。我在50 GB的数据库上有一个运行时间较长的存储过程,在一个输入表中有大约250万条记录。此过程读取一个表(输入表)并规范化行(大多数列具有文本值而不是ID),然后将规范化的行插入另一张表中。有什么问题? SQL Server服务的内存消耗尽可能增加。我必须设置一个上限以避免冻结服务器。这正常吗?我知道SQL Server会在内存上维护数据,而不是释放内存以避免将来再次加载它,但是就我而言,我将来不需要它,因为这只是一个读取数据,对其进行规范化和将其移到另一个表。
您的描述绝对是正常的。 SQL Server在内存中缓存了尽可能多的数据,以加快执行速度。到RAM的行程比到硬盘驱动器的行程要快得多。没有限制,它将把所有内容填充到内存中,即使操作系统必须将内容分页到磁盘。这将使服务器的爬网速度变慢。
当SQL Server达到其内存限制时,它将决定保留哪些内容以及清除哪些内容以为新数据腾出空间。不要尝试对其进行微观管理。
尝试在处理之后使用此代码块,并将其安排在SQL作业中,并根据您的方便更改内存值。
IF(SELECT(physical_memory_in_use_kb / 1024)FROM sys.dm_os_process_memory)> = 7000开始EXEC sp_configure'显示高级选项',1重新配置EXEC sp_configure'最大服务器内存',5120 --5GB重新配置等待延迟'00:02:00'EXEC sp_configure'最大服务器内存',40960 --40 GB重新配置并覆盖
END