Oracle для профессионалов

         

Буфер журнала повторного выполнения


Буфер журнала повторного выполнения используется для временного кеширования данных оперативного журнала повторного выполнения перед записью на диск. Поскольку перенос данных из памяти в память намного быстрее, чем из памяти — на диск, использование буфера журнала повторного выполнения позволяет существенно ускорить работу сервера. Данные не задерживаются в буфере журнала повторного выполнения надолго. Содержимое этого буфера сбрасывается на диск:

  • раз в три секунды;
  • при фиксации транзакции;
  • при заполнении буфера на треть или когда в нем оказывается 1 Мбайт данных журнала повторного выполнения.
  • Поэтому создание буфера журнала повторного выполнения размером в десятки Мбайт — напрасное расходование памяти. Чтобы использовать буфер журнала повторного выполнения размером 6 Мбайт, например, надо выполнять продолжительные транзакции, генерирующие по 2 Мбайта информации повторного выполнения не более чем за три секунды. Если кто-либо в системе зафиксирует транзакцию в течение этих трех секунд, в буфере не будет использовано и 2 Мбайт, — содержимое буфера будет регулярно сбрасываться на диск. Лишь очень немногие приложения выиграют от использования буфера журнала повторного выполнения размером в несколько мегабайт.

    Стандартный размер буфера журнала повторного выполнения, задаваемый параметром LOG_BUFFER в файле init.ora, определяется как максимальное из значений 512 и (128 * количество_процессоров) Кбайт. Минимальный размер этой области равен максимальному размеру блока базы данных для соответствующей платформы, умноженному на четыре. Если необходимо узнать это значение, установите LOG_BUFFER равным 1 байту и перезапустите сервер. Например, на моем сервере под Windows 2000 я получил следующий результат:

    SVRMGR> show parameter log_buffer NAME TYPE VALUE ----------------------------------- ------- -------------------------- log_buffer integer 1

    SVRMGR> select * from v$sgastat where name = 'log_buffer'; POOL NAME BYTES ----------- -------------------------- ---------- log_buffer 66560

    Теоретически минимальный размер буфера журнала повторного выполнения, независимо от установок в файле init.ora, в данном случае — 65 Кбайт. Фактически он немного больше:

    tkyte@TKYTE816> select * from v$sga where name = 'Redo Buffers';

    NAME VALUE ------------------------------ ---------- Redo Buffers 77824

    То есть размер буфера — 76 Кбайт. Дополнительное пространство выделено из соображений безопасности, как "резервные" страницы, защищающие страницы буфера журнала повторного выполнения.



    Содержание раздела