SQL语句从表中请求一个行时,Oracle首先检查内部内存结构,核实数据是否在一个数据缓冲区中。如果是,就从那里返回请求的数据,从而避免一次物理性的IO操作。在Oracle的某些64位版本中,由于SGA非常大,所以小型数据库可以整个儿缓存下来,这已经在“Tweak Oracle data buffer parameters to cache entire databases”一文中进行了讨论。但是,对于非常大的数据库来说,RAM数据缓冲区无法容纳所有数据库块。 Oracle允许将频繁使用的块放到RAM中。如果数据缓冲区不足以容纳整个数据库,Oracle会通过“最不常用”(least-recently-used)算法,判断要将数据库的哪些页从内存刷新回数据库中。Oracle在数据缓冲区中为每个块都维持了一个驻留内存的控制结构:新数据块插入数据缓冲区的中部,一个块每次被请求时,都会移至列表开头。最少用的数据块会逐渐落到数据缓冲区的末尾,最终被删除,以便为新数据块腾出空间。 从Oracle 8开始,Oracle提供了3个独立的RAM池来容纳进入的Oracle数据块: