Windows 文件缓存突然下降

Bra*_*adC 6 windows-server-2003 cache sql-server sql-server-2008

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

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

我有第二台服务器(只有 24 个内核,但在其他方面几乎相同)没有表现出相同的症状,甚至运行完全相同的 SSAS 实例、相同的查询和相同的负载(这是一个负载平衡的环境) .

我在 dba.stackexchange.com 上问了一个以SSAS 为重点详细问题,但有几个关于 Windows 行为的问题:

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

  2. 我可以预先填充文件缓存或以某种方式主动管理它吗?(我不确定在我们的环境中是否可以选择使用 RAMDRIVE

有一次,我们确实将服务器上的网络优化设置更改为“最大化文件共享的数据吞吐量”以匹配另一个框,但这似乎没有产生显着差异。

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

Pau*_*man 3

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

\n每秒都会运行一个进程来评估可以写入磁盘并从缓存中刷新的内容。您特别询问是否有办法查看哪些进程正在使用缓存或其中有哪些文件。我的理解是,所有磁盘读取和写入都会被缓存,因此所有读取或写入磁盘的进程都将“使用”缓存。我还没有找到任何方法来查看内容是什么。

\n系统文件缓存中的文件数据会按照操作系统确定的时间间隔写入磁盘,并释放该文件数据之前使用的内存\xe2\x80\x94,这称为刷新缓存。延迟将数据写入文件并将其保留在缓存中直到缓存被刷新的策略称为延迟写入,它由缓存管理器以确定的时间间隔触发。刷新文件数据块的时间部分取决于它在高速缓存中存储的时间量以及自上次在读操作中访问数据以来的时间量。这确保了经常读取的文件数据将在系统文件缓存中保持最大时间的可访问性。详细信息\n

\n在 Server 2003 中,如果缓存管理器不尝试将修改的文件数据写回文件,并且可用内存变得稀缺,则内存管理器的修改写入器线程会将未写入的数据写回文件。系统不依赖内存管理器将文件数据刷新回磁盘。相反,缓存管理器尝试使用“延迟写入”过程及时将数据写回非易失性存储。当程序修改文件数据时,缓存管理器会跟踪有多少数据被修改或“脏”。缓存管理器每秒将缓存修改数据的八分之一写回到磁盘。细节

\n