15май Фоновый процесс: DBWR

Database Writer (DBWR) - основные задачи, которые этот процесс решает:

  • Выполняет запись буферов в файлы данных.
  • Отвечает за управление буферным кешем (ведение LRU списка).
  • Обновляет заголовки файлов данных информацией о контрольной точке (до 8.0 версии).

Управление буферным кэшем.

Модифицированный буфер в буферном кэше помечается как «грязный». DBWR пытается поддерживать буферный кеш в "чистоте", записывая грязные буфера на диск. Так как буфера постоянно заполняются и модифицируются пользовательскими процессами, то количество свободных буферов все время уменьшается. Может случиться, так что число свободных буферов станет настолько мало, что пользовательский процесс, который должен прочитать блок с диска и записать его в кеш, не сможет найти свободный буфер. DBWR управляет буферным кешем так, чтобы пользовательские процессы всегда смогли найти свободные буфера. О том, как это ораклом реализовано, можно прочитать в статье «Немного об LRU списке» . В дополнение к информации, изложенной на приведенной ссылке, хочу сделать ударение на следующем моменте: Dirty-список очень важен еще и потому, что DBWR с его помощью, может оптимизировать процесс сброса данных на диск, записывая смежные блоки за одну операцию.

Запись буферов на диск.

DBWR записывает содержимое буферов на диск по определенным событиям. Об этом почитайте в статье «Как с буферным кэшем и между собой взаимодействуют серверный процесс пользователя и DBWn?» . А так как невозможно работу DBWR рассматривать изолировано от LGWR, то еще можно ознакомиться с постом ”Как же формируются данные для журналов повторного выполнения?”. Хочется обратить внимание на двух маленьких, но существенных деталях:

  • в файлы данных могут записываться изменения незафиксированных транзакций
  • изменения, выполненные зафиксированными транзакциями, не обязательно сразу же будут записаны в файлы данных

Производительность

Производительность процесса DBWR имеет принципиальное значение для повышения производительности всей системы. В первую очередь это связано с вопросами взаимодействия с процессом LGWR. Подробнее в посте «Сообщение в alert.log: Checkpoint not complete»

Экземпляр может иметь несколько процессов DBWR. Можно сконфигурировать несколько (до десяти) процессов DBWn (DBW0 ... DBW9). В большинстве систем работает только один процесс записи блоков базы данных, но в больших, многопроцессорных системах имеет смысл использовать несколько. Если сконфигурировано более одного процесса DBWn, не забудьте также увеличить значение параметра инициализации DB_BLOCK_LRU_LATCHES(начиная с 9 параметр не используется). Он определяет количество защелок списков по давности использования LRU lists (в версиях выше 8i называются списками количества обращений — touch lists). Каждый процесс DBWn должен иметь собственный список. Если несколько процессов DBWn совместно используют один список блоков для записи на диск, они будут конфликтовать друг с другом при доступе к списку.

Обычно процесс DBWn использует асинхронный ввод-вывод для записи блоков на диск. При использовании асинхронного ввода-вывода процесс DBWn собирает пакет блоков для записи и передает его операционной системе. Процесс DBWn не ждет, пока ОС запишет блоки, — он собирает следующий пакет для записи. Завершив асинхронную запись, ОС уведомляет об этом процесс DBWn. Это позволяет процессу DBWn работать намного быстрее, чем при последовательном выполнении действий.

Литература

http://www.firststeps.ru/sql/oracle/r.php?79

http://doc.novsu.ac.ru/oracle/conceps/7013scm.09.html

http://wbt.neo.rr.com/dpec/courses/or3101/or3101ac.htm

http://www.dbspecialists.com

Комментарии (0)



Новый комментарий

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 6 + 0
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению





Разделы блога



Последние публикации



Последние коментарии