找出 SQL Server 释放内存的原因

Rea*_*ces 5 sql-server memory sql-server-2008-r2 vmware

我有一个用于共享点和 ssrs 的 SQL Server 2008 R2。SQL Server 承载两个实例。

有几分钟,两个实例都超时了,没有响应。

CPU 缓慢上升到 100%,两个实例均为 30%,操作系统为 30%(以及一些较小的东西)。

之后,16GB 的内存未从 SQL Server 分配,一些进程使用了​​几 GB 的内存(在 esxi 上不知道是哪个)。

此后,SQL Server 再次拥有最大内存量,PLE 大约为 15000。

我想知道的是,如何跟踪 SQL Server 被迫放弃内存的原因?

跟踪文件中某处的历史记录,还是 Windows 事件?(到目前为止我都击中了)

我试过:

DECLARE @log NVARCHAR(100)
SELECT @log = Substring(PATH, 1, Len(PATH) - Charindex('\', Reverse(PATH))) + '\log.trc'
FROM   sys.traces
WHERE  id = 1
SELECT 
    g.DatabaseID,
    g.LoginName,
    g.StartTime,
    g.EndTime,
    g.DatabaseName,
    g.FileName,
    e.name
FROM  ::fn_trace_gettable(@log, 0) as g
inner join sys.trace_events e on g.eventclass = e.trace_event_id 
inner join sys.trace_categories as c on e.category_id = c.category_id
inner join sys.master_files as m on g.databaseID = m.database_id and g.filename = m.name
order by StartTime desc
Run Code Online (Sandbox Code Playgroud)

但是在停电期间找不到任何东西。

如果事实证明无法找出发生这种情况的原因,我将来如何进行监控。

编辑:

SQL Server 版本:10.50.6000.34 企业版,

服务器正在 esxi 5.5 中虚拟化,

页面文件设置为 8GB。

错误日志显示了一个 sharepoint 服务用户的单次登录失败。(还有很多成功的日志备份)

更新:

从那以后,我从 VMWare 团队那里得到确认,在此期间任何相关机器上都没有发生 Vmotion。并且没有发生可能影响机器的膨胀。

我还让网络团队确认 Nagios 在与该服务器场相关的任何机器上都没有出现明显的延迟峰值。

我们已经排除了当时正在运行的任何可能的报告。

然而,在过去的统计数据中,我们还看到了 3 次其​​他 16GB 内存从 SQL Server 下降的事件。其中 2 项与业绩暂时下降的报告有关。

sta*_*ray 2

由于 SQL Server 将内存释放回操作系统,这意味着内存压力是外部的,因此您无法在 SQL Server 内部查找原因。您的答案将来自 SQL Server 外部,我知道有一种工具可以跟踪操作系统的内存分配。

Rammap https://technet.microsoft.com/en-us/sysinternals/rammap.aspx