使用 SQL Server 2008 R2,供应商数据库中的主事务表与所有其他表相比非常庞大,大约有 14 个索引。其中一些索引不会在我们的环境中使用,但我们无法删除它们。这不是问题,这只是我们必须忍受的事情。
我的问题是为什么这些低读取或无读取索引中的一些似乎正在使用内存 - 比同一个大表上经常使用的其他索引更多。我原以为大部分缓冲区缓存都会用于频繁读取的对象。这些索引上发生的唯一事情是写开销。
例如,这些低读取索引中的一个分配了大约 2 GB 的内存(索引总大小的 58%),另一个分配了 1.7 GB 的内存(其大小的 27%)。同时,规模庞大且使用良好的聚集索引本身只有 4 个演出(其大小的 2%)。具有大量读取的不同 NC 索引在缓冲区缓存中只有 100 MB(其大小的 5%)。
查看物理统计数据,我可以看到碎片非常糟糕。从该表上的所有写入和非顺序插入可以理解这一点。不过,我不确定它是否与内存使用有关。
查看这些索引的操作统计数据也很有趣。
我意识到这是一个抽象的问题,我没有提供很多实际的统计数据。我只是好奇 SQL Server 如何做出这些缓冲区缓存使用决策,并想知道是否有人理解它。