Mar*_*erg 18 sql-server-2008 memory
我希望您对此提出意见。我有一个 sql server 2008r2 Ent。埃德。64 位,16 核和 64GB RAM。截至 20111014,有一个 SQL Server 实例已完全修补。
最大内存设置为 60000MB。在线几天后根据任务管理器的可用内存量为 0。
如果我将最大内存更改为 53GB 以下,它会在几天后稳定下来并有一些可用内存。
根据任务管理器分配内存的是sql进程。我如何接受问题的真正含义?不用说,我已经做了很多测试,但还没有按照我的喜好解决这个问题。哦,当可用内存降至 0 空闲时,我们不会出现典型的内存饥饿滞后。
更新 1:
受到本页https://dba.stackexchange.com/a/7062/2744上另一个与 RAM 相关的 Q/A 的启发。我使用这两个来查看 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 ) ;
Run Code Online (Sandbox Code Playgroud)
这些显示的使用量首先选择 7948432 Kb 第二个 44030,57812 MB,即 sql server 总共使用了大约 52GB ......那么我的其余 RAM 去哪儿了?:-) 任务管理器显示现在缓存的 363、可用的 401、免费的 40 和 sqlservr.exe 具有内存私有集 64 459 656。最大 RAM 设置为 60000MB 和以前一样。
Mar*_*ith 20
SQL Servers max memory 设置仅定义缓冲池使用限制。将需要超出该限制的可变但重要的分配。
Jonathan Kehayias 的、Christian Bolton和John Samson有关于该主题的 300/400 级帖子。Brent Ozar有一篇更容易阅读的文章,这可能是一个更好的起点。
还相关:SQL Server 2008 R2 “Ghost Memory”
mrd*_*nny 16
如上所述,缓冲池和过程缓存是唯一受最大服务器内存控制的东西。SQL Server 中还有很多其他东西会占用超出该限制的内存。它们包括(但不限于):