24апр
Как с буферным кэшем и между собой взаимодействуют серверный процесс пользователя и DBWn?
Вся информация, которую получают и обрабатывают пользователи,проходит через буферный кэш. То есть информация с внешних носителей считывается в память, после модификации возвращается на диск.Рассмотрим как взаимодействуют серверные процессы пользователей и фоновый процесс DBWR. Server Process
- Сначала, серверный процесс пользователя проверяет наличие необходимого блока в буферном кеше. Если такой блок обнаружен, он перемещается в MRU конец списка LRU (стандартный LRU алгоритм). Это - логическое чтение (перемещаются только указатель на буфер), поскольку никакой фактической операции В/В не происходит. Если же нужный блок не обнаружен в буферном кеше, серверный процесс должен считать блок данных из файла данных.
- Перед чтением из файла данных, серверный процесс ищет в списке LRU свободный блок.
- Во время поиска по списку LRU, происходит процесс перемещения модифицированных (грязных) блоков в dirty список (еще его называют checkpoint queue,LRUW) процессом DBWR.
- Если размер dirty списка превышает установленный в базе данных соответствующий порог, то серверный процесс уведомляет фоновый процесс DBWn, что пора сбрасывать грязные блоки из буферного кеша в файлы данных. Если серверный процесс не может найти свободного блока в пределах значения параметра _db_block_max_scan_pct, то об этом также уведомляется DBWn для сброса грязных блоков. Поиск прекращается.
- После того, как свободный блок будет обнаружен, серверный процесс начнет читать данные из файла данных в свободный буфер, который перемещается MRU конец списка LRU (стандартный LRU алгоритм).
- Если блок несогласован по чтению, то создается более ранняя версия данных из текущих данных и данных повторного выполнения.
DBWn process
Процесс DBWn управляет буферным кешем и занимается записью модифицированных блоков на диск. Этот процесс реагирует на следующие события в Оракле:
- Событие Dirty List Exceeds its Size Threshold: серверный процесс находит, что грязный список превысил размер порога, и сигнализирует об этом DBWn, чтобы тот сбросил грязные блоки на диск. DBWn пишет на диск блоки из dirty (грязного) списка и неважно являются ли изменения в блоках зафиксированными или нет. Размер dirty списка (checkpoint queue) регулируется различными параметрами: от старых LOG_CHECKPOINT_INTERVAL и LOG_CHECKPOINT_TIMEOUT до новых FAST_START_IO/MTTR_TARGET.
- Событие Search Threshold Exceeded: когда серверный процесс не может найти свободного блока в списке LRU в пределах значения параметра _db_block_max_scan_pct, то он уведомляет DBWn, что пора сбрасывать грязные блоки. DBWn пишет на диск блоки непосредственно из списка LRU и неважно являются ли изменения в блоках зафиксированными или нет.
- Событие Three Second Time-Out: Если процесс DBWn никто раньше неразбудит, то каждые три секунды DBWn просыпается и переносит грязные блоки из списка LRU в dirty список, чтобы было достаточно буферов для записи новых блоков. Если наступило хотя бы одно из двух предыдущих событий или событие LGWR Signal a Checkpoint, то DBWn записывает блоки в файлы данных и неважно являются ли изменения в блоках зафиксированными или нет. В противном случае опять ложится спать.
- Событие LGWR Signal a Checkpoint: Когда LGWR оповещает, что контрольная точка произошла, DBWn переносит грязные блоки из LRU списка в грязный список. Информацию об этом можно почерпнуть в посте Нормальная контрольная точка и Инкрементальная контрольная точка.
- Событие Alter Tablespace Offline Temporary or Alter Tablespace Begin Backup: Когда статус табличного пространства изменен с опцией Offline Temporary или Begin Backup, то DBWn пишет грязные буфера этого табличного пространства из грязного списка в файлы данных этого табличного пространства.
- Событие Drop Object: Когда объект удаляется, DBWn сначала сбрасывает грязные блоки объекта на диск.
- Событие Clean Shutdown (чистое выключение): Normal, Immediate, or Transactional
Новый комментарий
|
Поиск по блогам
Подпишись на RSS:
Читателям
Рекомендую к прочтению
Разделы блога
Последние публикации
Последние коментарии
|