Sql server SQL Server在每日加载后未释放内存

Sql server SQL Server在每日加载后未释放内存,sql-server,database,sql-server-2012,Sql Server,Database,Sql Server 2012,我们有一个SQL Server 2012企业版,128GB内存,Windows 2008R2。SQL Server作业每天凌晨3点运行,将数据加载到数据库需要5小时。在此过程中,SQL Server使用123GB(分配的最大内存) 作业完成后,SQL Server不会释放RAM 查询的内存利用率,其中缓冲池显示97GB。用户在此期间不访问数据库。我重新启动了SQL Server服务以降低RAM。我没有找到与此问题相关的正确答案。为什么它不释放RAM?如何降低RAM利用率 SQL Server作业

我们有一个SQL Server 2012企业版,128GB内存,Windows 2008R2。SQL Server作业每天凌晨3点运行,将数据加载到数据库需要5小时。在此过程中,SQL Server使用123GB(分配的最大内存)

作业完成后,SQL Server不会释放RAM


查询的内存利用率,其中缓冲池显示97GB。用户在此期间不访问数据库。我重新启动了SQL Server服务以降低RAM。我没有找到与此问题相关的正确答案。为什么它不释放RAM?如何降低RAM利用率

SQL Server作业->SSIS包->将数据从Mysql导入SQL Server数据库


感谢

这是经过设计的,一旦SQL Server使用内存,它会保留内存,不会将其释放回操作系统

任务管理器可能会显示SQL Server使用的所有/几乎所有内存,但如果您想查看SQL Server实际使用的内存量,可以使用以下查询

SELECT    (physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB
FROM sys.dm_os_process_memory;  

根据设计,一旦SQL Server使用内存,它就会保留内存,不会将其释放回操作系统

任务管理器可能会显示SQL Server使用的所有/几乎所有内存,但如果您想查看SQL Server实际使用的内存量,可以使用以下查询

SELECT    (physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB
FROM sys.dm_os_process_memory;  

根据设计,SQL Server保留已分配的RAM。大部分RAM用于缓冲池。缓冲池是一个缓存,它将数据库页保存在内存中,以便快速检索

如果SQL Server要释放一些内存,并且有人要在之后运行一个请求它的查询,那么查询将不得不等待昂贵的物理I/O来生成数据。因此,SQLServer会尽可能长时间地保存尽可能多的内存(以及配置的内存)

指定最小服务器内存和最大服务器内存。仔细设置最大内存设置可以为其他进程的运行留出空间。这篇文章引用了一个复杂的公式来确定留下多少空间:

  • 从操作系统总内存中,为操作系统本身预留1GB-4GB内存
  • 然后减去潜在SQL Server内存分配的等效值 在由堆栈组成的最大服务器内存控件之外 大小1*计算的最大工作线程数2+-g启动参数3(或 如果未设置-g,则默认为256MB)。剩下的应该是 单个实例设置的最大服务器内存设置
在我们的服务器中,我们通常只需使用它,并将最大内存选项设置为比总物理内存低几GB。这为操作系统和其他应用程序留下了很大的空间

如果SQL Server内存超过最小服务器内存,并且操作系统处于内存压力下,SQL Server可以释放内存,直到达到最小服务器内存设置

参考文献:

所有数据库软件的主要设计目标之一是 最小化磁盘I/O,因为磁盘读写是最重要的 资源密集型业务。SQL Server在中构建缓冲池 存储从数据库读取的页面的内存。SQL中的大部分代码 服务器致力于最大限度地减少物理读取和 在磁盘和缓冲池之间写入。SQL Server尝试访问 两个目标之间的平衡:

  • 防止缓冲池变得太大,导致整个系统内存不足
  • 通过最大化缓冲池的大小来最小化对数据库文件的物理I/O
当SQLServer动态使用内存时,它会查询系统 定期确定可用内存量。维持这个 可用内存阻止操作系统(OS)分页。如果更少 内存是空闲的,SQL Server将内存释放到操作系统。如果更多的内存 如果是免费的,SQL Server可能会分配更多内存。SQL Server添加内存 仅当其工作负载需要更多内存时;处于静止状态的服务器不会 增加其虚拟地址空间的大小

随着越来越多的用户连接并运行查询,SQL Server将获得 根据需要增加物理内存。SQL Server实例将继续 获取物理内存,直到达到其最大服务器 内存分配目标或窗口指示不再存在 空闲内存过多;当内存超过最小值时,它会释放内存 服务器内存设置,Windows指示内存不足 内存不足

当其他应用程序在运行的计算机上启动时 SQL Server,它们会消耗内存和可用物理内存量 下降到SQL Server目标之下。SQL Server实例将进行调整 它的内存消耗。如果另一个应用程序被停止,则 内存可用时,SQL Server实例会增加 其内存分配的大小。SQL Server可以释放并获取多个 每秒有兆字节的内存,可以快速调整到 内存分配更改

如果出于某种原因:

  • 你一定要找回那种记忆
  • 你知道你暂时不需要它
  • 您愿意为虚拟内存分配和物理I/O支付罚金,以便在下次需要该内存时从磁盘检索数据

  • 然后可以将数据库最大服务器内存设置临时重新配置为较低的值。这可以通过SSMS用户界面完成,或者您可以使用
    sp\u configure“max server memory”
    然后使用
    reconfigure
    以编程方式进行更改。

    根据设计,SQL server保留已分配的RAM。大部分RAM用于缓冲池。缓冲池是一个缓存,它将数据库页保存在内存中,以便快速检索

    如果SQL Server要释放一些内存,并且有人要在之后运行一个请求它的查询,那么查询将不得不等待昂贵的物理I/O来生成数据。因此,SQ