我在 AIX 6.1 上运行 Oracle 数据库,Oracle 使用 JFS2 文件系统。 Maxperm 设置为 90%。这是繁忙的数据库服务器,但它不使用文件系统缓存(少于 2%)。系统有40GB可用内存。
不使用文件系统缓存是否有原因?
答案1
Oracle 实际上很努力避免文件系统在可以执行此操作的系统上缓存数据文件(以及控制和日志文件)。具有并发 I/O 的 AIX 和 JFS2 就是这种情况(请参阅管理 AIX 上的 Oracle 数据库也可获取调整建议)。
这个想法是为了避免数据的双缓冲。 Oracle 在 SGA 中缓存块。如果操作系统也缓存这些内容,那么您就会在 RAM 中获得两次它们,这是一种浪费。 Oracle 应该能够比操作系统的缓存替换策略更准确地管理其缓存 - 它比操作系统在正常情况下拥有更多关于当前工作负载的块的重要性/热度的信息。
(Oracle 还做了一些非常奇特的“写缓冲”,只有数据库才能执行这些操作来维护 ACID 属性,并且需要精确控制刷新和同步的时间和内容。)
如果您有空闲 RAM,并且 Oracle 缓存命中率不好,则应考虑增加 SGA(特别是 DB 缓冲区缓存)的大小。请查看V$DB_CACHE_ADVICE
和其他调优视图,并记住您也需要 RAM 用于其他用途(尤其是 PGA,而且还包括非 Oracle 应用程序),因此不要将所有 RAM 分配给 SGA。
如果您使用的是 Oracle 11g,请进行设置自动内存管理应该考虑这样你可以设置一个单一的目标内存大小,并让Oracle自己平衡不同的区域。 (对于以前的版本,请研究自动 SGA 和 PGA 管理。)
与往常一样,在应用于生产系统之前测试(和基准测试)您所做的任何更改。并且不要让操作系统挨饿,在 Oracle 内存区域之外留出“合理”的内存量以满足其他需求。
请注意,数据库引擎(无论哪个品牌)或文件系统/操作系统是否最擅长缓存是一个古老的争论。一个经过良好调优的数据库在正常情况下应该能够更好地进行缓存。操作系统可能会击败配置错误的数据库。