Windows文件caching突然下降

我有一个64位Windows 2003服务器,具有48个CPU内核和128GB内存,运行单个应用程序(SQL 2008 Analysis Services)。 SSAS目前正在使用大约50GB的内存。

SSAS在很大程度上依赖于Windows文件caching来保存常用数据(例如,参见本文 )。 在我的服务器上,windows文件caching通常在10-15GB范围内,但偶尔会突然下降到5-6GB( Memory\System Cache Resident Bytes )。 发生这种情况时,所有SSAS页面读取都必须转到磁盘,查询将开始超时,直到文件caching重新填充。

我有第二个服务器(只有24个核心,但几乎相同),即使运行完全相同的SSAS实例,相同的查询和相同的负载(这是一个负载平衡的环境),不会出现相同的症状, 。

我已经在dba.stackexchange.com上提出了一个关于SSAS的详细问题 ,但是关于Windows行为的一些问题:

  1. 有没有办法知道为什么SSAS数据库文件被刷新出caching?

  2. 我可以预先填充文件caching还是以某种方式主动pipe理它? (我不确定在我们的环境中使用RAMDRIVE是一个选项)

有一点,我们改变了服务器上的networking优化设置,以“最大化文件共享的数据吞吐量”来匹配另一个盒子,但是这似乎没有显着差异。

编辑 :增加赏金。 如果我们不能回答“为什么”,那么也许只是一种更好地理解当前正在使用caching的进程,或者其中包含哪些文件,或者可能导致我们走向正确方向的一种方式。

我通常不会只发布一个链接,但由于你还没有得到任何帮助,请检查这一点 。 这是关于cachingpipe理器如何工作的非常详细的文章。

一个进程每秒运行一次,以评估哪些可写入磁盘并从caching刷新。 您具体询问是否有办法查看哪些进程正在使用caching或其中包含哪些文件。 我的理解是,所有的磁盘读写都被caching,所有读取或写入磁盘的进程都将“使用”caching。 我还没有find任何窥视内容的方法。

系统文件caching中的文件数据以操作系统确定的时间间隔写入磁盘,并释放该文件数据以前使用的内存 – 这被称为清空caching。 延迟数据写入文件并将其保存在caching中直到caching被刷新的策略称为延迟写入,并且由cachingpipe理器以确定的时间间隔触发。 文件数据块被刷新的时间部分基于其被存储在高速caching中的时间量以及从读取操作中上次访问数据以来的时间量 。 这可确保经常读取的文件数据在系统文件caching中保持可访问的最长时间。 细节

在Server 2003中,如果cachingpipe理器不尝试将修改后的文件数据写回文件,并且空闲内存变得稀less,则内存pipe理器的修改后的写入器线程会将未写入的数据写回到文件中。 系统不依赖内存pipe理器将文件数据刷新到磁盘。 相反,cachingpipe理器试图通过使用“延迟写入”过程及时将数据写回非易失性存储。 当程序修改文件数据时,cachingpipe理器会logging有多less数据被修改或“脏”。 高速cachingpipe理器每秒将高速caching的修改后的数据的八分之一写回磁盘。 细节

LimitSystemFileCacheSizeMB设置的值是多less?

Analysis Services操作指南
http://download.microsoft.com/download/B/E/1/BE1AABB3-6ED8-4C3C-AF91-448AB733B1AF/SSASOpsGuide2008R2.docx

一个有趣的实用程序,将为您提供有关服务器内存在哪里使用的详细信息是RAMMap 。 特别是,您可能还没有意识到Standby Cache中正在使用的内存。