有人问我,我们的 SQL Server 实例之一是否有足够的内存。这是在具有 40 个 CPU 和 64 GB RAM 的 x64 计算机上运行的 SQL Server 2008 R2 标准版。
此实例下运行的所有数据库的总大小略大于 300 GB。
该实例已配置为最小服务器内存为 4096 MB,最大服务器内存为 24000 MB。
到目前为止,我已经设法收集了以下信息:
正在使用的物理内存:
SELECT physical_memory_in_use_kb,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory
physical_memory_in_use_kb process_physical_memory_low process_virtual_memory_low
------------------------- --------------------------- --------------------------
25657180 0 0
性能计数器:
SELECT counter_name , cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)',
'Target Server Memory (KB)', 'Granted Workspace Memory (KB)',
'Maximum Workspace Memory (KB)',
'Memory Grants Outstanding', 'Memory Grants Pending')
counter_name cntr_value
----------------------------------- --------------------
Granted Workspace Memory (KB) 1024
Maximum Workspace Memory (KB) 17714520
Memory Grants Outstanding 1
Memory Grants Pending 0
Target Server Memory (KB) 24576000
Total Server Memory (KB) 24576000
缓冲池:
select count(*) AS Buffered_Page_Count
,count_big(*) * 8192 / (1024 * 1024) as Buffer_Pool_MB
from sys.dm_os_buffer_descriptors
Buffered_Page_Count Buffer_Pool_MB
------------------- --------------------
2499693 19528
缓冲池大小图:
BPHR:
请:
计划缓存大小:
每秒页面读取次数
每秒页面写入次数
我的问题是:
我应该看的其他东西是什么?
如果以上就足够了,我是否必须建议添加更多内存(可能是 50 GB),因为 PLE 会随着时间的推移而下降(而总 IO 等待时间显示会增加)?
目标服务器内存等于最大内存集。如果配置了实例,这是否表明实例可以利用更多内存?
那么,我如何知道我的 SQL Server 是否需要更多内存?或者它没有
前几句
为什么你的最大记忆只有在
24000MB
你有64GB
物理记忆的时候?是否有其他实例/服务/...在其上运行?如果答案是否定的,那么您可以将 max memory 设置为 about
56GB = 57344 MB
。附带说明一下,sql server 2008 R2 没有扩展支持。最好考虑迁移到更新的版本。
哪些对象正在消耗缓冲池内存
由于您的 PLE 一直很低,并且随着时间的推移变得更低,您可以查看在一天中的不同时间点究竟是什么在使用此 BP 内存。
首先看看哪些数据库消耗最多:
之后,您可以在数据库级别更深入地了解哪些对象在内存中,以及这些对象在内存中拥有多少页。
如果更精细的查询报告更少,则必须删除
and bd.page_type in ('data_page', 'index_page')
以包含 LOB 数据页。下一步
您应该将此信息与系统上运行的查询放在一起,您可能能够优化某些查询/添加索引,从而减少内存中需要的数据。
如果你想走得更远,
ROW / PAGE
如果你有 CPU 能力,可以考虑压缩。压缩数据在内存中保持压缩状态。
另请注意,如果您使用的是 sql server 2008 R2 标准版,则只能转到
64GB
max memory。从 sql server 2014 开始,这会达到128GB
最大内存。这也是迁移的另一个原因。仅基于 PLE,这不是唯一需要考虑的因素,我会说您的页面过于频繁地被刷新到内存之外。优化您的查询或增加您的内存。
资源
它已将所有可能的内存分配给最大内存允许的缓冲池,它不会超过这个数量的缓冲池分配。
同样,查看内存中的对象以及负责它的查询是否可以优化将是一个好的开始。
此外,如果您有空间,我会增加最大内存(如果您实际上在机器上有 64GB 内存)或增加机器上的内存。
再次记住,
64GB
sql server 2008 R2 标准版有最大内存限制,并且128GB
从 sql server 2014 标准版开始增加。企业版没有限制。