我们有一些虚拟机分配了 X 内存。这个内存量有点随机。它被分配给机器,因为这是物理机器拥有的内存量,因为供应商的建议,或者因为我们对我们认为实例需要多少内存做出了最佳猜测。
我理解内存越多越好,但我也想避免在不需要时向 VM 过度分配内存。另一台机器可以更好地利用内存。
确定每个实际处于活动状态和正在使用的实例的理想内存量的最佳方法是什么?除了页面预期寿命之外,我们还应该查看其他计数器吗?我们有实例的 PLE 为 10k+,而其他实例的 PLE 为 100k+。
任何见解都非常感谢。谢谢,山姆
我有一个生产数据库,它遇到了剧烈波动的页面预期寿命 (PLE) 问题。(它在随机时间崩溃为零。)
我一直在研究 PLE 问题,并发现一些似乎指向 VMWare 问题的内容,但我不确定我是否正确使用了数据。似乎我正在丢失缓冲区/缓存页面。
我正在使用这个查询:
SELECT COUNT(*) AS cached_pages_count,
CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE DB_NAME(database_id)
END AS database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id), database_id
ORDER BY cached_pages_count DESC;
Run Code Online (Sandbox Code Playgroud)
(在这里找到)
我正在计算 PLE 崩溃前后的结果(计数)。一个例子是之前的 1,097,820 和之后的 131,394。所以我似乎“丢失”了 966,426 页。
我的猜测是所有虚拟机的硬件都处于压力之下,因此它会随机从服务器中交换一些内存一段时间。(这只是一个猜测。)当这种情况发生时,所有页面都丢失了,因此 PLE 直线下降。
那么,我sys.dm_os_buffer_descriptors是否正确使用了视图? 从我读到的它总是显示使用过的缓冲区/缓存页面。所以如果它是空的(或显着减少),我要么不再有内存,要么是空的。(我很想用一种方法来证实这个结论。)
或者还有另一种解释为什么计数下降这么多?
我们的系统管理员管理虚拟机。我希望在使用这些数据去找他们之前了解我的查询。从数据库的角度来看,PLE 崩溃的时间似乎是随机的。(在 PLE 崩溃期间不会发生重新索引或其他高性能的事情)
我做了大量的工作,看看它是否与工作负载有关。虽然存在一个性能不佳的查询,但用完所有缓存还不够。[没有] 当缓冲区计数下降时,服务器上没有重建或其他非常规用户活动。即使是这样,我也不会在上面的查询中看到使用它吗?(意味着如果它是 SQL Server 操作,计数不会保持不变,只是内容不同吗?)
我无权访问 VMWare 设置。我希望在涉及那些做的事情之前更好地理解我的发现。这个问题的重点是确保我首先正确使用视图。
在评论链的末尾:
我试图说 PLE 问题导致我丢失了缓冲页面问题。我用来获取 PLE 的查询将显示低 PLE,因为页面正在丢失。所以他们身上的东西消失了。这是一个错误的读数,因为内存量减少了。
这是我的@@Version:
Microsoft SQL Server 2012 …Run Code Online (Sandbox Code Playgroud)