|
|
|
как работает 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 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
wurdu, спасибо всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 09:18:44 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
wurdu, подскажите, пожалуйста, последний вопрос: когда транзакция начинается редо генерит записи не только о повторном выполнении,но и об андо записях,таким образом при восстановлении будет прочитан редо лог,а там внутри будет содержаться инфа об андо и таким образом все будет восстановлено в андо,а потом откатано,правильно? просто раньше я думал,что в андо инфа попадает сразу напрямую в undo tablespace без buffer cache,а терь прочитал, что андо блоки также хранятся в буфер кеше,а потом сбрасывается на диск как и все данные. Но в любом случае самым первичным остается редо.Он чаще всего сбрасывается и содержит все,что необходимо для восстановления в случае падения и для обыкновенной работы.Т.е. даже если андо из буфера не скинется вместе с данными,сервер упадет,то при восстановлении накатятся все логи и тем самым восстановится андо в кеше,с которого потом и откатимся. или я неправильно понял про хранение undo записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 10:09:43 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeV... или я неправильно понял про хранение undo записей?Да правильно вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 10:18:37 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
wurdu, вот теперь все разложилось по полочкам. спасибо всем большое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 10:29:26 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVНо в любом случае самым первичным остается редо.Он чаще всего сбрасывается и содержит все,что необходимо для восстановления в случае падения и для обыкновенной работы.Т.е. даже если андо из буфера не скинется вместе с данными,сервер упадет,то при восстановлении накатятся все логи и тем самым восстановится андо в кеше,с которого потом и откатимся. Скажем так, redo пишется на диск не то чтобы чаще. Транзакция не считается зафиксированной до тех пор, пока её redo не записан в оперативный журнал. Т.е. commit ждет завершения этой записи. А грязные блоки из буферного кэша (в сегменты таблиц или в undo) сбрасываются на диск асинхронно. Для завершения транзакции сохранение этих данных на диск некритично. Грязные блоки (сегментов данных и отката) потерянные в результате аварии экземпляра будут восстановлены из redo, но говорить про их восстановление именно в кэше наверное не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 14:50:38 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
mcureenab, а куда их восстановит БД при восстановлении из редо лога?она прочтет,что такие-то и такие-то блоки модифицировались,генерились такие-то записи андо,вот она и восстановит их в кеше,а потом сбросит этот кэш на диск как в обычной работе. или не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 14:57:27 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeV, недавно узнал, что восстанавливается весь блок напр в блоке есть записи с ид 1,2,3 для select * from t where ід=1 если запись 1 менялась, то востанавливается весь блок (все три записи), и если запись 2 которая нам НЕ НУЖНА! восстановить нельзя, то получим ору зы запись можно менять несколько раз и для отката все версии будут сохранены в роллбек сегменте ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 15:31:24 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
stax.., спасибо,интересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 15:34:06 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
mcureenabТ.е. commit ждет завершения этой записиНу, конечно, не все так просто в современных версиях. Есть PL/SQL оптимизация и в том же PL/SQL цикле уже не ждет и закоммиченные транзакции могут быть потеряны. Опять же, есть параметры commit_logging и commit_wait, да и сам commit бывает batch, immediate, wait, nowait. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 15:40:59 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
wurdumcureenabТ.е. commit ждет завершения этой записиНу, конечно, не все так просто в современных версиях. Есть PL/SQL оптимизация и в том же PL/SQL цикле уже не ждет и закоммиченные транзакции могут быть потеряны. Опять же, есть параметры commit_logging и commit_wait, да и сам commit бывает batch, immediate, wait, nowait. что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны" ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 16:00:55 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
stax..недавно узнал, что восстанавливается весь блок stax..что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны" О сколько нам открытий чудных... http://www.sql.ru/forum/actualsearch.aspx?search=lazy+commit&sin=0&bid=3&a=Barkovsky&ma=0&dt=-1&s=1&so=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2011, 17:47:07 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
stax..что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны" ..... stax ничего сверхестественного - утрата базы данных, неполное восстановление. недокоммиты, это вообще говоря не совсем commit, а иногда совсем не commit. но, в ряде случаев мы можем потерять транзакции, чтобы повторить из первоисточника, а не из журнала БД. соглашаясь с такими маловероятными ситуациями можно неплохо поднять производительность операций массового изменения данных ничего не теряя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2011, 02:17:25 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
брадобрейна диск может сбрасываться только current версии 1. блоки данных находятся в кэше - buffer cache. 2. блоки undo также находятся в buffer cache. если буффер переполнен, куда же деваться undo блоку, тогда как не на диск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 09:59:26 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
правильно ли я понимаю, что Undo block также находится в SGA в buffer cache? тогда у нас в buffer cache два типа блоков есть: блоки данных и блоки undo? ранее я себе представлял, что при изменении данных запись происходит непосредственно в undo tablespace - непосредственно в файл, минуя кэш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 10:25:31 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
LudeVhoarfrost, не понял? ведь при commit или rollback данные из андо удаляются с х*****я бы? Как бы тогда открытый курсор мог читать "удалённые" данные? тест-кейс, 1,2 - сессии Код: plsql 1. 2. 3. 4. и всё фетчится хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 10:33:05 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
сорри на некропостинг ), не увидел дату сообщения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 10:36:03 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Мог бы кто-нибудь мне любезно ответить? а то я читаю Льюиса и немного запутался с undo. Если undo блоки также находятся в общем кэше SGA, как можно узнать, сколько у нас в buffer cache обычных блоков, и сколько блоков Undo. хочется видеть примерно следующее: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 10:39:33 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
В версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется? имеется ввиду, когда другие сессии читают в consistent режиме. сессия 1 изменяет данные в таблице и ещё не зафиксировала их. сессия 2 читает данные из Undo, которые были до того момента, как сессия 1 начала их менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 10:56:17 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинВ версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется? реду генерируется при изменениях данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:16:16 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
JonhsonжвачкинВ версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется? реду генерируется при изменениях данных select - это не изменение данных. а REDO в исключительных случаях при select генерируются. вот вам пример: http://www.sql.ru/forum/129951/otlozhennaya-ochistka-blokov-i-select-vzyato-u-t-kayta правда те обсуждения были аж в 2004 году. стало интересно, этот механизм до сих пор работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:30:09 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
авторПростой Select (без update clause) будет генерировать REDO еще в одном случае. Это происходит когда делается consistent gets блоков, то есть когда select читает данные изминенные и незакоммиченные в другой сессии. а что в этом случае пишется в REDO? какой вектор изменения? чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:31:41 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинкакой вектор изменения? чего? Какое слово из "данные изминенные и незакоммиченные в другой сессии" тебе непонятно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:33:04 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
есть мнение, что изменённые пишется через "е" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:34:16 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Jonhsonесть мнение, что изменённые пишется через "е" опечатка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:40:17 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovжвачкинкакой вектор изменения? чего? Какое слово из "данные изминенные и незакоммиченные в другой сессии" тебе непонятно?.. не понятно, что будет записано в журнал повтора, в случае согласованного чтения CR? обычная ситуация: update data в redo log (буффер журнала) записывается: 1. пишем вектор - запись отмены в undo block 2. пишем вектор - данные, до изменения в блоке данных и после изменения 3. объединяем две записи выше в одну общую запись (вектор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:46:39 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
вопрос по-русскому языку: почему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:50:49 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинзаписывается Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной сессии. Вот она-то и запишет. Когда читать захочет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:51:31 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovжвачкинзаписывается Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной сессии. Вот она-то и запишет. Когда читать захочет. а как получить примерно такую выборку, с количеством undo блоков в кэше и data блоков? Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:02:01 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
а ундо блок это не дата блок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:22:39 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкин, v$bh ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:26:48 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Jonhsonа ундо блок это не дата блок? из прочитанного, я так понял, что ундо блок - это клон блока данных. сам же исходный блок данных становится грязным, т.е. модифицированным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:29:48 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
xaxa.жвачкин, v$bh Код: plsql 1. 2. 3. правильно ли я понял, что все блоки со статусом cr - относятся к Undo? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:35:46 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
авторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката, то есть пометит транзакцию как завершенную (state=9 - зафиксирована). Могли бы вы любезно пояснить, сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения? таблица транзакций - находится в каждом таком блоке, в его заголовке? не совсем понял... спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 12:49:35 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинавторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката, то есть пометит транзакцию как завершенную (state=9 - зафиксирована). Могли бы вы любезно пояснить, сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения? таблица транзакций - находится в каждом таком блоке, в его заголовке? не совсем понял... спасибо! сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo. Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 13:25:36 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинжвачкинпропущено... Могли бы вы любезно пояснить, сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения? таблица транзакций - находится в каждом таком блоке, в его заголовке? не совсем понял... спасибо! сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo. Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента? конец-то нагуглил. авторПри создании сегмента отката выделяется minextents пока еще пустых экстентов, причем первый оракловский блок первого экстента зарезервирован под таблицу транзакций, или заголовок сегмента отката. Мы будем говорить, что голова и хвост [прим.5]сегмента отката находятся в начале второго блока первого экстента сразу после заголовка (см. рис. 1). При назначении транзакции на этот сегмент отката, информация отката записывается, начиная со второго блока, причем у каждой активной транзакции существует также голова и хвост в сегменте отката. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 13:33:09 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Мог бы кто-нибудь любезно мне рассказать, правильно ли я описываю процесс ниже и поправить в случае ошибок: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 17:39:03 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
11 - 13 не понятно, зачем анду читать лишний раз? впрочем настолько детально меня не интересовал вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 18:15:35 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Возник ещё один вопрос, если запрос ниже всегда показывает свободные блоки - free, повод ли это думать, что буферный кэш имеет достаточный размер и точно не нуждается в увеличении размера? Код: plsql 1. 2. 3. например, выставил PGA и SGA вручную, указал минимальное значение для buffer_cache=5G. и вижу, что 512 Мб всегда свободно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 18:27:34 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинxaxa.жвачкин, v$bh Код: plsql 1. 2. 3. правильно ли я понял, что все блоки со статусом 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. В принципе, начиная с 15 идут блоки для UNDO/ROLLBACK с номером USN (15+USN*2 -- заголовок UNDO/ROLLBACK сегмента V$ROLLNAME.USN, 15+USN*2+1 -- блок UNDO/ROLLBACK сегмента) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 03:53:09 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, большое спасибо за подробный ответ! Скажите любезно, cr блоки - единственные блоки, которые не сбрасываются из кэша на диск в Oracle? автор8. Оригинальный грязный блок, который сессия модифицирует в случае переполнения buffer cache сбрасывается на диск разве не так, если кэш переполнен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 09:58:56 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Модифицируется только CURRENT версия блока -- она одна на весь кеш и одна может быть грязной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 10:04:56 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
авторЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis да я в процессе, только сразу походу чтения столько вопросов возникают, начиная со второй главы. Интересна следующая ситуация (не было возможности имитировать): Код: plsql 1. 2. 3. 4. В результате работы транзакции первый redo заполнился, произошло переключение на второй журнал. В этот момент кэш переполнился и грязные буферы стали сбрасываться на диск. Транзакция продолжает идти. Второй журнал заполнился и переключился на третий. В buffer cache уже не хватает места, чтобы хранить cr блоки, которые не сбрасываются на диск. В этот момент третий журнал заполнился. Четвёртого журнала нет, транзакция ещё не завершена. Что произойдёт в тот момент, когда все Redo переполнятся, а транзакция ещё не завершится? Где держать новые cr блоки, когда в кэше нет места - он заполнен другими cr блоками? Ошибка ORA- ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 10:18:40 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Забудь про CR блоки Обновляются только CURRENT блоки Нет места -- вытесняются на диск Транзакция подтверждена -- у какой-то части блоков, находящихся в кэше, прописывается этот признак (быстрая очистка), остальным он пропишется при чтении (отложенная очистка) другим процессом (с диска или из кэша) Транзакция откачена -- по всем блокам будет выполнен откат, если блок уже на диске, то прочитается в память и откатится, опять не хватит места в памяти -- измененные блоки уедут на диск. И та же фигня с признаками активных транзакций. Только еще и сегментах отмены надо будет пометить, что запись применена, что точно также "пачкает" блоки отмены ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 10:35:16 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis , есть перевод на русский, довольно неплохой (насколько я понял, переводил местный в свое время ] Перевод - Киселёв А. Н. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 10:51:26 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Т.е. быстрая и отложенная очистка применима только к current блокам, всё верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 11:52:32 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
жвачкинпочему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer? Потому же, почему и буфет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 14:40:01 |
|
||
|
как работает undo?
|
|||
|---|---|---|---|
|
#18+
Jonhsonа ундо блок это не дата блок? "Данные в базе уже модифицированы, так что 99,9% работы выполнено, например, перечисленные ниже операции. - Блоки undo сгенерированы в области SGA - Модифицированные блоки данных сгенерированы в области SGA". (с) Том Кайт, Oracle для профессионалов, глава 9, Повтор и отмена страница 392 так что Undo Блок и data блок с точки зрения Кайта разные блоки, если я правильно прочёл то, что написано выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2016, 19:39:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1887890]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
180ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 510ms |

| 0 / 0 |
