consistent read блока после cleanout'а

Паутиныч
Дата: 06.10.2015 11:49:55
Как Оракл понимает, где искать предыдущую версию блока, если он уже пережил cleanout?

Например, в одной сессии начался долгий запрос на момент SCN=1000. В процессе работы дошёл до блока, чей SCN = 1020, который за время работы запроса успел измениться и пережил block cleanout. Наш запрос интересует версия блока, которая была изменена в SCN=950. Будем считать, что undo сегмент ещё жив. Как Оракл найдёт нужную версию блока?

Где содержится ссылка? Блок мог измениться много раз за время запроса.


Перечитал Кайта, Льюиса, Джулиана Дайка, но так и не нашёл ответ на вопрос.
Begin ner
Дата: 06.10.2015 12:04:04
Паутиныч
Например, в одной сессии начался долгий запрос на момент SCN=1000.
...
Наш запрос интересует версия блока, которая была изменена в SCN=950.

загнул-то как! зачем тебе в запросе неактуальные данные?
Perl'ун
Дата: 06.10.2015 12:10:02
Паутиныч
Где содержится ссылка? Блок мог измениться много раз за время запроса.


В текущем блоке ссылка на предыдущий блок который может быть еще лежит в UNDO, в том на его предыдущий и т.д. Обычный односвязный список. Сколько бы изменений блок не претерпел, все они выполняются последовательно, и каждый образ блока перед изменением сохраняется в UNDO и в текущем блоке вносится ссылка на этот образ.
Perl'ун
Дата: 06.10.2015 12:12:31
Begin ner
Паутиныч
Например, в одной сессии начался долгий запрос на момент SCN=1000.
...
Наш запрос интересует версия блока, которая была изменена в SCN=950.

загнул-то как! зачем тебе в запросе неактуальные данные?


чтобы получить срез согласованных данных.

если требуются актуальные данные, нужно использовать блокировки.
Паутиныч
Дата: 06.10.2015 12:17:07
Perl'ун
Паутиныч
Где содержится ссылка? Блок мог измениться много раз за время запроса.


В текущем блоке ссылка на предыдущий блок который может быть еще лежит в UNDO, в том на его предыдущий и т.д. Обычный односвязный список. Сколько бы изменений блок не претерпел, все они выполняются последовательно, и каждый образ блока перед изменением сохраняется в UNDO и в текущем блоке вносится ссылка на этот образ.


Ссылка на undo block находится в ITL, а он очистился во время cleanout'а.
Делаю такой вывод согласно презентации Дайка Transaction Internals слайд 29.
Begin ner
Дата: 06.10.2015 12:23:39
пора форум переименовать в ПТОракл =(
Begin ner
Дата: 06.10.2015 12:32:48
Паутиныч,

так ты хочешь добиться многоверсионности неактуальных данных с согласованностью по чтению в ручном режиме с использованием блокировок?!! это нужно обладать чем-то больше, чем IQ + Oracle
Perl'ун
Дата: 06.10.2015 12:35:34
Паутиныч
Ссылка на undo block находится в ITL, а он очистился во время cleanout'а.
Делаю такой вывод согласно презентации Дайка Transaction Internals слайд 29.


Если я или Begin ner скажут, что это не так, вы какой вывод сделаете? )))

Чистка ITL не означает, что весь ITL удаляется. Удаляются только объекты, которые после чистки становятся ненужными.
Паутиныч
Дата: 06.10.2015 12:41:11
Perl'ун
Паутиныч
Ссылка на undo block находится в ITL, а он очистился во время cleanout'а.
Делаю такой вывод согласно презентации Дайка Transaction Internals слайд 29.


Если я или Begin ner скажут, что это не так, вы какой вывод сделаете? )))

Чистка ITL не означает, что весь ITL удаляется. Удаляются только объекты, которые после чистки становятся ненужными.


Ну и как же Оракл понимает, какой ITL слот все ещё нужен, а какой нет?
Sayan Malakshinov
Дата: 06.10.2015 13:05:55
Паутиныч,

ну 27-ю страницу открой там :)
автор
  • ITL entry is overwritten by each change to the block by the current transaction

  • Previous change is recorded in undo block
  • таким образом он по цепочке и может восстанавливать. А вообще лучше Oracle Core Льюиса прочитай