powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
23 сообщений из 73, страница 3 из 3
как работает undo?
    #39272936
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос по-русскому языку:

почему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer?
...
Рейтинг: 0 / 0
как работает undo?
    #39272937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинзаписывается
Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной
сессии. Вот она-то и запишет. Когда читать захочет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как работает undo?
    #39272950
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovжвачкинзаписывается
Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной
сессии. Вот она-то и запишет. Когда читать захочет.


а как получить примерно такую выборку, с количеством undo блоков в кэше и data блоков?

Код: plsql
1.
2.
3.
    name               count
data block       11111111111111111
undo block       1234
...
Рейтинг: 0 / 0
как работает undo?
    #39272976
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ундо блок это не дата блок?
...
Рейтинг: 0 / 0
как работает undo?
    #39272980
xaxa.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкин,

v$bh
...
Рейтинг: 0 / 0
как работает undo?
    #39272983
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhsonа ундо блок это не дата блок?

из прочитанного, я так понял, что ундо блок - это клон блока данных.
сам же исходный блок данных становится грязным, т.е. модифицированным.
...
Рейтинг: 0 / 0
как работает undo?
    #39272988
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xaxa.жвачкин,
v$bh
Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='cr';



правильно ли я понял, что все блоки со статусом cr - относятся к Undo?
...
Рейтинг: 0 / 0
как работает undo?
    #39272999
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката,
то есть пометит транзакцию как завершенную (state=9 - зафиксирована).

Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!
...
Рейтинг: 0 / 0
как работает undo?
    #39273030
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкинавторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката,
то есть пометит транзакцию как завершенную (state=9 - зафиксирована).

Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!

сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo.

Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента?
...
Рейтинг: 0 / 0
как работает undo?
    #39273043
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкинжвачкинпропущено...


Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!

сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo.

Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента?
конец-то нагуглил.

авторПри создании сегмента отката выделяется minextents пока еще пустых экстентов, причем первый оракловский блок первого экстента зарезервирован под таблицу транзакций, или заголовок сегмента отката.
Мы будем говорить, что голова и хвост [прим.5]сегмента отката находятся в начале второго блока первого экстента сразу после заголовка (см. рис. 1). При назначении транзакции на этот сегмент отката, информация отката записывается, начиная со второго блока, причем у каждой активной транзакции существует также голова и хвост в сегменте отката.
...
Рейтинг: 0 / 0
как работает undo?
    #39273313
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мог бы кто-нибудь любезно мне рассказать, правильно ли я описываю процесс ниже и поправить в случае ошибок:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
1. Сессия начинает выполнять update
2. Выделенный серверный процесс читает блоки данных в buffer cache, если они там отсутствуют.
3. Перед началом транзакции изменяется SCN (после завершения транзакции?)
4. Идёт запись в журнальный буфер, описывающая как вставить запись отмены в undo block
5. Идёт запись в журнальный буфер, описывающая изменения в блоке данных
6. Идёт запись в сегмент Undo (запись в файл undotbs.dbf на диске), обновляется таблица транзакций 
7. Создаётся клон блока (cr block) в buffer cache, чтобы другие сессии могли читать данные в согласованном режиме
8. Оригинальный грязный блок, который сессия модифицирует в случае переполнения buffer cache сбрасывается на диск
9. cr block в случае, если buffer cache переполнен другими cr блоками также сбрасывается на диск.
10. Происходит фиксация транзакции - commit;
11. Выделенный серверный процесс ищет undo block (cr) в buffer cache, чтобы узнать, зафиксирована транзакция или нет
12. Если не находит, читает блок с диска
13. Обращается к сегменту Undo и просматривает таблицу транзакций, видит что транзакция завершена
14. Происходит очистка undo блока (cr block) - commit cleanout
...
Рейтинг: 0 / 0
как работает undo?
    #39273341
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11 - 13 не понятно, зачем анду читать лишний раз?

впрочем настолько детально меня не интересовал вопрос.
...
Рейтинг: 0 / 0
как работает undo?
    #39273352
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник ещё один вопрос, если запрос ниже всегда показывает свободные блоки - free, повод ли это думать, что
буферный кэш имеет достаточный размер и точно не нуждается в увеличении размера?

Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='free';



например, выставил PGA и SGA вручную, указал минимальное значение для buffer_cache=5G. и вижу, что 512 Мб всегда свободно...
...
Рейтинг: 0 / 0
как работает undo?
    #39273475
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинxaxa.жвачкин,
v$bh
Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='cr';



правильно ли я понял, что все блоки со статусом cr - относятся к Undo?Нет, статус CR -- это блок используемый для чтения на какой-то момент времени (consistent read). Возможно, восстановленный с помощью применения UNDO. Возможно, никогда не существоваший именно в таком виде в БД (хоть на диске, хоть в кеше). Никогда не пишется на диск. Соответственно, не генерит REDO (отложенная очистка блоков работает с CURRENT версией)
Поэтому все твои дальнейшие рассуждения (после пункта 6) -- это фантазии.
Читать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis , есть перевод на русский, довольно неплохой (насколько я понял, переводил местный в свое время завсегдатай?)
по типам блоковС 9i
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select decode(decode(least(class#, 17), 17, 18-mod(class#, 2), class#),
		 0, 'free',
		 1, 'data block',
		 2, 'sort block',
		 3, 'save undo block',
		 4, 'segment header',
		 5, 'save undo header',
		 6, 'free list',
		 7, 'extent map',
		 8, '1st level bmb',
		 9, '2nd level bmb',
		10, '3rd level bmb',
		11, 'bitmap block',
		12, 'bitmap index block',
		13, 'file header block',
		14, 'unused (space header block ???)',
		15, 'system undo header',
		16, 'system undo block',
		17, 'undo header',
		'undo block') Class,
	count(*)
from v$bh
group by decode(least(class#, 17), 17, 18-mod(class#, 2), class#)
/

В принципе, начиная с 15 идут блоки для UNDO/ROLLBACK с номером USN (15+USN*2 -- заголовок UNDO/ROLLBACK сегмента V$ROLLNAME.USN, 15+USN*2+1 -- блок UNDO/ROLLBACK сегмента)
...
Рейтинг: 0 / 0
как работает undo?
    #39273554
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, большое спасибо за подробный ответ!

Скажите любезно, cr блоки - единственные блоки, которые не сбрасываются из кэша на диск в Oracle?

автор8. Оригинальный грязный блок, который сессия модифицирует в случае переполнения buffer cache сбрасывается на диск разве не так, если кэш переполнен?
...
Рейтинг: 0 / 0
как работает undo?
    #39273556
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модифицируется только CURRENT версия блока -- она одна на весь кеш и одна может быть грязной
...
Рейтинг: 0 / 0
как работает undo?
    #39273563
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis
да я в процессе, только сразу походу чтения столько вопросов возникают, начиная со второй главы.

Интересна следующая ситуация (не было возможности имитировать):

Код: plsql
1.
2.
3.
4.
1. Размер SGA 4 Гб
2. Размер Redo Log 128 Мб, всего три журнала.
3. Выполняется полное обновление большой таблицы ~ 260 Гб. 
4. Коммит ставится лишь после того, как все строки таблицы обновлены



В результате работы транзакции первый redo заполнился, произошло переключение на второй журнал.
В этот момент кэш переполнился и грязные буферы стали сбрасываться на диск.
Транзакция продолжает идти. Второй журнал заполнился и переключился на третий.
В buffer cache уже не хватает места, чтобы хранить cr блоки, которые не сбрасываются на диск.
В этот момент третий журнал заполнился. Четвёртого журнала нет, транзакция ещё не завершена.

Что произойдёт в тот момент, когда все Redo переполнятся, а транзакция ещё не завершится?
Где держать новые cr блоки, когда в кэше нет места - он заполнен другими cr блоками?

Ошибка ORA- ???
...
Рейтинг: 0 / 0
как работает undo?
    #39273581
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забудь про CR блоки
Обновляются только CURRENT блоки
Нет места -- вытесняются на диск
Транзакция подтверждена -- у какой-то части блоков, находящихся в кэше, прописывается этот признак (быстрая очистка), остальным он пропишется при чтении (отложенная очистка) другим процессом (с диска или из кэша)
Транзакция откачена -- по всем блокам будет выполнен откат, если блок уже на диске, то прочитается в память и откатится, опять не хватит места в памяти -- измененные блоки уедут на диск. И та же фигня с признаками активных транзакций. Только еще и сегментах отмены надо будет пометить, что запись применена, что точно также "пачкает" блоки отмены
...
Рейтинг: 0 / 0
как работает undo?
    #39273594
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis , есть перевод на русский, довольно неплохой (насколько я понял, переводил местный в свое время ]

Перевод - Киселёв А. Н.
...
Рейтинг: 0 / 0
как работает undo?
    #39273653
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. быстрая и отложенная очистка применима только к current блокам, всё верно?
...
Рейтинг: 0 / 0
как работает undo?
    #39273825
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинпочему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer?
Потому же, почему и буфет. :)
...
Рейтинг: 0 / 0
как работает undo?
    #39274130
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhsonа ундо блок это не дата блок?
"Данные в базе уже модифицированы, так что 99,9% работы выполнено, например, перечисленные ниже операции.
- Блоки undo сгенерированы в области SGA
- Модифицированные блоки данных сгенерированы в области SGA".

(с) Том Кайт, Oracle для профессионалов, глава 9, Повтор и отмена страница 392

так что Undo Блок и data блок с точки зрения Кайта разные блоки, если я правильно прочёл то, что написано выше.
...
Рейтинг: 0 / 0
как работает undo?
    #39274352
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, таблица транзакций в сегменте отката - одна единственная на всю БД
или в каждом сегменте отката своя таблица транзакций и таких таблиц несколько?
...
Рейтинг: 0 / 0
23 сообщений из 73, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]