SQL Server 2012中长时间运行的存储过程中的内存消耗

问题描述 投票:0回答:2

我正在具有16 GB RAM的新服务器中使用SQL Server 2012。我在50 GB的数据库上有一个运行时间较长的存储过程,在一个输入表中有大约250万条记录。此过程读取一个表(输入表)并规范化行(大多数列具有文本值而不是ID),然后将规范化的行插入另一张表中。有什么问题? SQL Server服务的内存消耗尽可能增加。我必须设置一个上限以避免冻结服务器。这正常吗?我知道SQL Server会在内存上维护数据,而不是释放内存以避免将来再次加载它,但是就我而言,我将来不需要它,因为这只是一个读取数据,对其进行规范化和将其移到另一个表。

sql-server stored-procedures memory bulkinsert database-performance
2个回答
2
投票

您的描述绝对是正常的。 SQL Server在内存中缓存了尽可能多的数据,以加快执行速度。到RAM的行程比到硬盘驱动器的行程要快得多。没有限制,它将把所有内容填充到内存中,即使操作系统必须将内容分页到磁盘。这将使服务器的爬网速度变慢。

当SQL Server达到其内存限制时,它将决定保留哪些内容以及清除哪些内容以为新数据腾出空间。不要尝试对其进行微观管理。


0
投票

尝试在处理之后使用此代码块,并将其安排在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

© www.soinside.com 2019 - 2024. All rights reserved.