SQL Server最大内存不限制对RAM的使用


18

我希望您对此提供意见。我有一个sql server 2008r2 Ent。埃德 具有16个内核和64GB RAM的64位。截至20111014,有一个完全修补的SQL Server实例。

最大ram设置为60000MB。在线几天后,根据任务管理器,免费ram的数量为0。

如果我将最大RAM更改为低于53GB,几天后它将稳定下来并有一些可用RAM。

是sql进程根据任务管理器分配ram。我该如何解决真正的问题?不用说,我已经做了很多测试,但是还没有按照我的喜好解决。当可用的内存降低到0时,我们不会得到典型的内存短缺。

更新1:

受到此页面上与RAM相关的另一个问题的启发,网址为/dba//a/7062/2744。我用这两个来查看RAM的用途。

SELECT TOP ( 10 )
        [type] AS [Memory Clerk Type] ,
        SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM    sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION  ( RECOMPILE ) ;

SELECT  DB_NAME(database_id) AS [Database Name] ,
        COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM    sys.dm_os_buffer_descriptors
--WHERE   database_id > 4 -- system databases
--        AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION  ( RECOMPILE ) ;

这些显示的使用量是第一个选择7948432 Kb,第二个是44030,57812 MB,这是SQL Server总共使用的约52GB ...那么,其余的RAM放在哪里了?:-)任务管理器现在显示已缓存363,可用401,免费40,并且sqlservr.exe的“内存”专用集为64 459656。最大Ram设置为60000MB。

Answers:


20

SQL Server的最大内存设置仅定义缓冲池使用的限制。超出该限制将有可变但重要的分配。

乔纳森·凯海耶斯(Jonathan Kehayias)克里斯蒂安·博尔顿Christian Bolton)约翰·萨姆森John Samson)在该主题上的帖子级别为300/400。布伦特·奥扎(Brent Ozar)的文章比较容易阅读,可能是一个更好的起点。

也相关:SQL Server 2008 R2“ Ghost Memory”


是的,我同意它仅限制缓冲池。谢谢您为我准备的书签。
MartinSjöberg

我正在阅读这些链接,并且那里有一些不错的东西。我将用发现的问题来更新我的问题。我也很高兴能收到Max Pizzeria的电话号码……我想知道他们是否可以送货上门?
MartinSjöberg

16

如前所述,缓冲池和过程高速缓存是唯一由最大服务器内存控制的事物。SQL Server中还有许多其他事情可以消耗超出该限制的内存。它们包括(但不限于):

  • 数据库邮件
  • SQLCLR
  • 扩展存储过程
  • 他们自己的二进制文件
  • SQL邮件
  • SSIS
  • SSAS
  • SSRS

上面提到的,我们在此服务器上使用ofc和ssis的二进制文件。
MartinSjöberg,

1
服务器上还安装了什么其他软件?我什么意思。MPIO驱动程序,闪存驱动器驱动程序,备份软件,防病毒,sys-internals等
mrdenny11年

该服务器很干净,是新安装的,但是我们确实有一些服务器。我将尽力在本周末获得一份完整的清单。短而从我的记忆......我们确实有一个的ioDrive(DELL),迈克菲在桌面上,的Iometer,的TreeSize processexplorer ...
马丁·舍贝里

1
FusionIO驱动程序需要大量内存才能使用。这可能要花很多。
mrdenny

有可能证明这一点吗?还是将其配置为使用更少的RAM?Sofar似乎必须释放RAM,并且我还没有发现任何缺点,但以防万一我们不得不增加SSIS软件包的数量,我担心RAM使用情况可能会发生什么。
MartinSjöberg


2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

为了减少最大服务器内存,您可能需要重新启动SQL Server才能释放内存。

我的理解是,如果尚未将缓冲池中的页面写入磁盘,那么直到它被释放之前,它才会被释放。

降低最大内存设置是否会导致SQL Server刷新脏页?

他可以监视perfmon中的缓冲区管理器以验证这一点。Perfmon-> SQLServer:Buffer Manager:数据库页面


您“可能”需要重新启动SQL Server。并非总是必需的。您知道释放内存是否需要重新启动的条件吗?
Nick Chammas

我会将这些详细信息编辑到您现有的答案中,然后删除该答案。也许mrdenny可以回答有关冲洗脏页的问题。
Nick Chammas

1
正确,SQL在脏页(已写入)时无法释放内存页。每次系统检查点将脏页写入磁盘时。我不相信更改最大服务器内存会导致发生检查点。
mrdenny

1
重新启动实例以更改内存设置可能是一个大错误。虽然更改内存设置不会导致CHECKPOINT对数据库进行操作,但会清除过程高速缓存。如果重新启动实例只是为了更改内存设置,则不仅过程高速缓存会很冷,而且数据高速缓存也会很冷。如果由于内存中的脏页而无法减少最大内存CHECKPOINT,请在数据库上运行命令以将脏页刷新到磁盘,然后在非高峰时间更改内存设置,而无需重新启动实例。
乔恩·塞格尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.