Oracle использует метод LRU ( что означает "наименее недавно использовавшийся"). Это компьютерный алгоритм, используемый для управления данными в кэше. Когда кэш заполняется и вам нужно место для новых вещей - сначала вы отбрасываете наименее недавно использованные элементы (вещи, которые вы некоторое время не использовали, но которые находятся в кэше, занимающем место).
Это не относится конкретно к блокам данных - и блоки данных на самом деле не хранятся в списке LRU, в наши дни ими управляет счетчик касаний, - но этот алгоритм подсчета касаний очень похож на LRU, поэтому вы можете думать об этом таким образом.
Короче говоря, когда вы слышите LRU, подумайте о кэше, который управляет некоторыми данными (любыми данными) и имеет тенденцию удалять элементы из кэша в зависимости от того, использовались ли они недавно или нет. Чем более недавно что - то использовалось, тем больше вероятность того, что оно останется в кэше.
Каждый блок имеет DBA - адрес блока данных, который состоит из файла# и блока#. Это однозначно идентифицирует блок в базе данных. Oracle использует этот "ключ" для идентификации блока в буферном кэше.
Если вы выполняете запрос, если некоторых блоков нет в кэше, это происходит потому, что LRU очистил их, чтобы выделить больше вещей, которые использовались в последнее время. Это не гарантия, но если вам нужна такая гарантия, вы можете использовать различные пулы в буферном кэше, в основном вы можете использовать KEEP
пул для хранения часто используемых сегментов в буферном кэше.
Надеюсь, это прояснит ситуацию.