28 января 2009 г.

Ожидания log file sync

Сессия, ожидает события log file sync, в то время как LGWR сбрасывает redo-информации из redo log buffer в redo log файлы.

Подробней: скажем какая-то сессия апдейтит какую-то таблицу. То есть выполняя апдейт, она генерит redo-информацию и записывает их в redo log buffer. В тот самый момент, когда сессия пишет redo-информацию в redo log buffer, LGWR сидит и ждет. Как только сессия коммитит транзакцию, LGWRу нужно сбросить redo-информацию из redo log buffer в redo log файлы и выдать сессии подверждение, что транзакция закоммичена. И пока LGWR сбрасывает redo-информацию из redo log buffer в redo log файлы, сессия ожидает события log file sync.

Мой коллега говорит, что это ожидание возникает только при commit'е сессии. Том Кайт тоже здесь пишет, что это ожидание возникает только при коммите:

log file sync - это клиентское ожидание события. Именно этого события ваши клиенты ждут, когда говорят "commit". Это ожидание, пока процесс LGWR фактически запишет их данные повторного выполнения на диск и фиксация транзакции будет завершена. Можно "настроить" этот процесс, ускорив работу процесса lgwr (отказавшись от использования raid 5, например) и фиксируя транзакции реже, генерируя меньше данных повторного выполнения (множественные изменения генерируют меньше данных повторного выполнения, чем построчные)
А как же сброс redo-информации из redo log buffer в redo-файлы по истечению 3 секунд, при заполнении redo log buffer'а на 1/3 и тд?

Если кто-то знает точный ответ на этот вопрос, напишите здесь.

4 коммент.:

Алексей Шаляпин - это я. комментирует...

имхо, поскольку свой scn транзакция получает именно в момент коммита, то его запись в редолог и приводит к соотвествующему ожиданию.

Oracle DBA комментирует...

да, вы правы. Кстати, DBWR тоже ожидает события log file sync перед записью грязных блоков. Он просит LGWR сбросить реду-записи, защищающие грязные блоки, которые он хочет сбросить на диск.

Oracle DBA комментирует...

Стив Адамс об этом пишет здесь: www.ixora.com.au/tips/mystery.doc. "Meanwhile, DBWR enters a log file sync wait and waits on its semaphore. This acts as a signal to the operating system to not schedule DBWR to run on a CPU until further notice, or until the wait times out. When LGWR has done its work, it posts DBWR’s semaphore to indicate to the operating system that DBWR can now be scheduled to run."

забава комментирует...
Этот комментарий был удален администратором блога.