|
|
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Добрый день, подскажите плиз,как работает undo своими словами,потому что из книг понял только общую суть,а мне хочется понять именно физику процесса. Когда транзакция начинает выполняться, она генерирует редо лог(для повторного выполнения в случае crash) и андо лог(для отката непримененных данных).Это понятно. Далее,когда мы нажимаем в конце транзакции rollback, применяются все записи из сегментов отката и приводят в первоначальное состояние - это тоже понятно. Если сервер упал,то при восстановлении сначала накатывается редо для повторного наката всех закомиченных и незакомиченных транзакций,а потом накатывается весь андо для отката всех незакомиченных транзакций,таким образом в БД остаются только закомиченные транзакции на момент падения - это понятно. Но вот непонятно вот что:ведь андо еще используется для совместного доступа к данным,т.е. пользователь видит неизмененные данные до тех пор,пока их не закоммитит другой,т.е. андо служит для хранения неизмененных данных.Получается так,что пользователь выбирает данные,они берутся в том виде,в котором они сейчас есть в SGA или на диске,а потом смотрим в андо и если там есть записи,то применяем их все и показываем пользователю именно это,т.е. то,что было до изменений? вот тут немного физику в последнем не понял( Если бы в андо хранились именно блоки,то понятно,но там нет блоков,там записи изменений,которые генерируются БД во время работы транзакции подскажите плиз как это происходит. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 17:35:03 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeV, понятно,что если при восстановлении в редо логе содержится фраза rollback, то записи для отката берутся из андо,а затем эти записи удаляются. то есть к моменту открытия БД после наката всего редо в андо остаются записи только по незакомиченным транзакциям, по которым не было ни commit, ни rollback ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 17:39:47 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVПолучается так,что пользователь выбирает данные,они берутся в том виде,в котором они сейчас есть в SGA или на диске,а потом смотрим на заголовок блока, в частности на ITL слоты. По этой информации узнаем, какая транзакция у нас активна и где в анду лежит нужная информация для построения консистентной версии блока. Дальше создаем клон этого блока и "откатываем" его состояние на нужный нам момент времени при помощи анду информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 17:51:44 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVто есть к моменту открытия БД после наката всего редо в андо остаются записи только по незакомиченным транзакциям, по которым не было ни commit, ни rollback Там лежат версии данных в соответствии с UNDO_RETENTION. На каждую запись может быть по нескольку версий. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 17:53:28 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
hoarfrost, не понял? ведь при commit или rollback данные из андо удаляются,поэтому в итоге после наката всего редо в андо останутся только те,которые не были ни закомичены, ни откатаны обратно. Откуда там несколько версии одного и того же? Не понял( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:00:15 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednik, спасибо большое за разъяснение! вот ток непонятно.а где мы создаем этот клон блока данных?если бы в buffer cache, то его потом бы пришлось скидывать на диска он нам там не нужен вроде как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:05:13 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
hoarfrost, ведь одни и теже записи менять нельзя одновременно,а при накате редо все записи о закомиченных или откатанных транзакциях учитываться уже потом не будут,поэтому применятся только те,которые остались недоделанными,а на один блок оновременно не может быть несколько изменений.. или я неправ где-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:09:44 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVесли бы в buffer cache да, там LudeVто его потом бы пришлось скидывать на диска он нам там не нужен вроде как. Зачем? У такого клона есть флаг, который говорит, что это консистентная версия, а не текущая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:16:48 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednik, спасибо большое!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:17:22 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVhoarfrost, ведь одни и теже записи менять нельзя одновременно,а при накате редо все записи о закомиченных или откатанных транзакциях учитываться уже потом не будут,поэтому применятся только те,которые остались недоделанными, а на один блок оновременно не может быть несколько изменений.. или я неправ где-то? До выделенного не совсем понятно, а по поводу жирненького, подумайте сами, какие бы тупняки хватал оракл, если бы вы были правы. Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:19:44 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednik, Скажите, пожалуйста, У такого клона есть флаг, который говорит, что это консистентная версия, а не текущая. А потом по принципу LRU текущая версия будет сброшена на диск,а эта очищена из памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:22:03 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednik, или она просто там не хранится в buffer cahe?а сразу очищается после доступа к этому блоку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:23:01 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
на диск может сбрасываться только current версии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:24:15 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednik, До выделенного не совсем понятно, а по поводу жирненького, подумайте сами, какие бы тупняки хватал оракл, если бы вы были правы. неправильно выразился,попозже попробую сформулировать вопрос корректнее. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:28:31 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVhoarfrost, не понял? ведь при commit или rollback данные из андо удаляются,поэтому в итоге после наката всего редо в андо останутся только те,которые не были ни закомичены, ни откатаны обратно. Откуда там несколько версии одного и того же? Не понял( Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Ждём одну минуту, а затем: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Ждём ещё одну минуту, после чего: Код: 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. 25. 26. 27. Спустя ещё одну минуту: Код: plsql 1. 2. 3. 4. 5. 6. 7. Flashback ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:31:37 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
hoarfrost, теперь понял,что вы имели ввиду,но я хотел сказать другое: вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления.А накатываться здесь будут только те транзакции,по которым не было commit или rollback. Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано. Так ли это? To_pravednik скажите, пожалуйста, какое время будет храниться этот клон в буфере? мне кажется,что он сразу будет очищен после доступа к нему,это так? спасибо всем большое за разъяснения физики процессов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:46:28 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере? мне кажется,что он сразу будет очищен после доступа к нему,это так? не так, он будет жить там по всем правилам LRU & touch cnt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:50:25 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVhoarfrost, теперь понял,что вы имели ввиду,но я хотел сказать другое: вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления.А накатываться здесь будут только те транзакции,по которым не было commit или rollback. Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано. Так ли это? To_pravednik скажите, пожалуйста, какое время будет храниться этот клон в буфере? мне кажется,что он сразу будет очищен после доступа к нему,это так? спасибо всем большое за разъяснения физики процессов Фокус твоего вопроса по поводу поведения instance recovery после падения или общая механика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 18:52:20 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVhoarfrost, теперь понял,что вы имели ввиду,но я хотел сказать другое: вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления. Да. Этим я демонстрировал, что данные из UNDO при COMMIT или ROLLBACK - не удаляются. Более того, там их может быть несколько версий, на разные моменты времени. А накатываться здесь будут только те транзакции,по которым не было commit или rollback. Накатываться будет всё, что было сделано после контрольной точки, если я понимаю правильно. И то, что не было зафиксированно - потом будет откатываться. Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано. Так ли это? В этом смысле - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 19:07:17 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере? мне кажется,что он сразу будет очищен после доступа к нему,это так? Нет, сразу очищен он не будет. Построение консистентной версии из анду - это трата ресурсов, на которой можно сэкономить, если оставить блок в буфере. А вдруг он нам(или другой транзакции) еще понадобиться ;). С другой стороны, плодить кучу версий одного блока и держать их постоянно на подхвате - тоже ресурсы. Если правильно помню, то максимальное число копий - это 6. После они начинают перезатираться. Какой алгоритм по времени - я не знаю да и информации вроде не встречал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 19:08:09 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
брадобрейLudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере? мне кажется,что он сразу будет очищен после доступа к нему,это так? не так, он будет жить там по всем правилам LRU & touch cnt Пасиб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 19:09:11 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
скажите, пожалуйста, какое время будет храниться этот клон в буфере? pravednik... С другой стороны, плодить кучу версий одного блока и держать их постоянно на подхвате - тоже ресурсы. Если правильно помню, то максимальное число копий - это 6. После они начинают перезатираться. ... Oracle Support говорит, что количество CR блоков может быть ограничено только размером buffer cache (пока не заполниться). Помниться на одном из семинаров даже такой вопрос был на майку :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 20:11:51 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
брадобрей, фокус моего вопроса скорее относится к поведению экземпляра после падения. в обыкновенной повседневной работе все более менее понятно..тот же редо+андо..тем более когда рассматриваешь ситуацию после падения становится многое понятно в повседневной работе. спасибо большое всем за объяснения. вроде все усвоил и понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 20:30:03 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
pravednikЕсли правильно помню, то максимальное число копий - это 6. После они начинают перезатираться.Это не максимальное, это target (по аналогии с pga_aggregate_target) BrodiagaOracle Support говорит, что количество CR блоков может быть ограничено только размером buffer cache (пока не заполнит Ь ся)Правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2011, 20:49:48 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
hoarfrostТам лежат версии данных в соответствии с UNDO_RETENTION. На каждую запись может быть по нескольку версий. :)UNDO_RETENTION начиная с 10.2 может и игнорироваться в случаях: UNDO_RETENTIONFor fixed- size undo tablespaces, the system automatically tunes for the maximum possible undo retention period, based on undo tablespace size and usage history, and ignores UNDO_RETENTION unless retention guarantee is enabled hoarfrostНакатываться будет всё, что было сделано после контрольной точки, если я понимаю правильно. И то, что не было зафиксированно - потом будет откатыватьсяНе совсем, т.к. используется Two Pass recovery. Этот CHECKPOINT . Вообще, автору я прежде всего рекомендовал бы прочитать Oracle Core: Essential Internals for DBAs and Developers. Там крайне подробно описаны механизмы, которые его интересуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 04:10:29 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=37583751&tid=1887890]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
193ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 524ms |

| 0 / 0 |
