|
|
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
В качестве опыта был написан и запущен следующий скрипт: Код: plaintext 1. 2. 3. 4. 5. 6. Замечу сразу, что COMMIT не был сделан. А был сделан ROLLBACK. В результате был сделан откат. Но сейчас не это главное. База работает в режиме ARCHIVELOG. В результате транзакции получилось 51 файлов журналов повторов(только для вставки). Так вот после анализа LogMiner-ом выяснился следующий факт: для этой транзакции было сформировано 947 уникальных номер SCN. Причём на каждый SCN приходится неодинаковое количество операторо insert into... Весь список публиковать не буду, только начало и конец: Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Делаем вывод, что реально SCN присваивается не каждой отдельной транзакции, а группе операторов в транзакции. Причём с первого вгляда понять логику - на какое количество операторов в транзакции присваивается SCN трудно. Я предполагаю, что на каждый сброс из буффера журнала повторов. Народ, прокомментируйте кто как сможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 21:30 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Один из серьезных курьезов в Oracle - это не точное понимание аббревиатуры SCN, поскольку это не одно а три разных по сути понятия: SCN - Sytem Commit Number SCN - System Checkpoint Number SCN - System Change Number В данном контексте мне видится что SCN означает - System Change Number, который используется Oracle как механизм внутренних блокировок. Этот номер увеличивается (счетчик) вне зависимости был выполнен commit или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 08:00 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
То что это именно "system change number" у меня сомнений нет. Код: plaintext 1. 2. 3. 4. Поэтому вопрос остаётся открытым, по какому принципу происходит присвоение значения? to ShgGena: Дай пример какой-нибудь таблицы, вью в котором есть столбец с именем "SCN" и это означает любое из: SCN - Sytem Commit Number SCN - System Checkpoint Number ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 09:04 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Все SCN в оракле используют одну и ту же последовательность. Разница в моментах времени, когда происходит изменение этой последовательности. При коммите назначается system commit number. Он же пишется в транзакционную таблицу блока и сегмента отката для пометки завершенности транзакции. System checkpoint number - это номер изменения системы, на который надо проводить синхронизацию, по окончании чекпойнта он прописывается в заголовки датафайлов. А в промежутках между коммитами, чекпойнтами и т.д. оракл проводит свои внутренние операции, которые помечаются как system change number. Поэтому различить их достаточно сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:44 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
"А в промежутках между коммитами, чекпойнтами и т.д. оракл проводит свои внутренние операции, которые помечаются как system change number. " Ты наставиваешь на том, что именно внутренние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 13:19 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
В ОраМаг должна выйти (или уже вышла) статья Павла Шендрыгайлова "Что хранят редо-логи". Как раз на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 14:07 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Да, интересно было бы почитать. Но вроде пока нет. А он тебе на сайт еще не бросил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 14:15 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Есть сомнения? В принципе, всю эту внутреннюю кухню и не надо знать. Какая разница, что означает scn, если он уникально определяет закоммиченную транзакцию? До коммита на scn ориентироваться нельзя, что опять-таки показывает ваш эксперимент - его просто нет. До фиксации уникальным идентификатором транзакции является положение транзакции в сегменте отката (поэтому одна транзакция и не может распределяться по разным сегментам отката). Это можно проверить по колонкам в v$logmnr_contents, относящимся к сегменту отката - xidusn, xidslt, xidsqn. Кстати, почему-то вы не посмотрели на столбец cscn - это как раз scn коммита. Можно также сделать дампы блоков и посмотреть как занимаются транзакционные слоты, когда появляется номер коммита, как выставляются блокировки и т.п. Один раз это даже интересно сделать. Команда очень простая alter system dump datafile {'filename'}|{fno} block {blockno}|block min {blockno} block max {blockno}. Надеюсь, синтаксис понятен. Команда недокументирована, поэтому на вопросы о ней отвечать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 14:17 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
to Al: из вышесказано, меня заинтересовала мысль, что "До фиксации уникальным идентификатором транзакции является положение транзакции в сегменте отката" Вы хотите сказать что номер SCN для операторов в транзакции определяется положением в сегменте отката? А что у сегментов отката уникальные номера в течении всей жизни БД? Замечу что вызывает какое-то внутреннее несогласие фраза "положение транзакции в сегменте отката". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 14:26 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Я буду ориентироваться на имена колонок в v$logmnr_contents. itl - interested transaction list - список транзакций в заголовке блока. Вы хотите сказать что номер SCN для операторов в транзакции определяется положением в сегменте отката? А что у сегментов отката уникальные номера в течении всей жизни БД? Разумеется, у сегмента отката есть свой уникальный номер (usn), который не изменяется. Архитектура транзакции следующая - в первой операции транзакции она распределяется в один из сегментов отката автоматически или по выбору разработчика xidusn. В транзакционной таблице в заголовке сегмента отката ей выделяется слот xidslt. Эта транзакционная таблица не бесконечна и переписывается по циклу. Каждый цикл переписывания этой таблицы увеличивает счетчик xidsqn. Таким образом, при активации транзакции ей назначается тройка чисел xidusn.xidslt.xidsqn. Эта же тройка чисел пишется и в itl блока данных, который модифицирруется транзакцией. Если транзакция затем меняет другие строки этого же блока, то в заголовках строк просто прописывается номер слота в itl блока для данной транзакции. Для других блоков, модифицируемых той же транзакцией, в itl пишутся та же тройка чисел xidusn.xidslt.xidsqn. Это не предположение, а архитектура оракула. SCN в данном случае не играет определяющей роли в идентификации транзакции. Все изменения, проводимые транзакцией будут всегда характеризоваться одним и тем же идентификатором. В транзакционной таблице сегмента отката также находится ссылка на последний использованный блок отката (rba колонки в v$logmnr_contents) и признак активности/завершенности транзакции. Если транзакция завершается аварийно, происходит откат изменений от последнего блока в usn по цепочке к первому в обратной последовательности изменений. В таблице транзакция помечается как неактивная и ей не назначается SCN, имеющий смысл system commit number. Если блок данных находится в кеше, то происходит откат "на месте", если блок был выбит из кеша, то он читается в ходе отката транзакции из датафайла в кеш и соответственно модифицируется. При коммите, выделяется SCN (commit number), lgwr пишет журнальный буфер в журнальный файл, в транзакционную таблицу пишется выделенный номер коммита и транзакция там же помечается как неактивная. Если блок с изменениями не выбит на диск, то в itl также прописывается SCN транзакции (commit cleanout) - точный номер коммита. Если блок был выбит из кеша, то работает механизм delayed cleanout - транзакция в itl помечается как неактивная и блокировки снимаются следующими транзакциями. Тонкость в том, что не всегда возможно восстановить точный номер коммита в этом случае (переписана транзакционная таблица в USN). Тогда в блок прописывается приблизительный номер scn (минимальный, присутствующий в USN). Замечу что вызывает какое-то внутреннее несогласие фраза "положение транзакции в сегменте отката". Извините, ораклу наплевать на это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 15:17 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
to AI: спасибо конечно за большой обьём информации. Но она несколько избыточна. По сути же очень мало. Только без обид, но меня интересует только SCN - system change number. Я понял твою мыслю так, что один и тот-же SCN присваивается операторам, информация отмены для которых помещается в один сегмент? То есть возвращаясь к моему примеру, и исходя из твоих слов - для транзакции было выделено 947 сегментов отката? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 15:30 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Но она несколько избыточна. По сути же очень мало. Только без обид, но меня интересует только SCN - system change number. То, что я написал - просто транзакционная архитектура оракла. Ориентироваться на scn в ней просто нельзя. Я понял твою мыслю так, что один и тот-же SCN присваивается операторам, информация отмены для которых помещается в один сегмент? Я этого не писал. Перечитай еще раз. То есть возвращаясь к моему примеру, и исходя из твоих слов - для транзакции было выделено 947 сегментов отката? Еще раз - scn это просто отметка о каком-то изменении состояния системы. В твоем примере под транзакцию был выделен только один сегмент отката, но в ходе выполнения транзакции система сменила свое состояние 947 раз. Ведь были невидимые транзакции в словаре типа выделения экстентов, переноса hwm, модификаций заголовков файлов от чекпойнтов, которые тоже приводили к увеличению scn. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 16:02 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Ok, тогда забудем всё что ты сказал. И снова вернёмся к моему вопросу: Код: plaintext 1. 2. 3. 4. 5. Как присваивается SCN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 16:10 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
Возможно у Вас в момент вставки были активны другие транзакции, что вызвало переключение журналов повторов. При переключении журналов SCH соответсвенно увеличивается. Получается, что вы пишите транзакцию, журнал кончается на 1, 4 или более insert'ов перключается журнал и увеличивается SCH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:14 |
|
||
|
Продолжение глубого понимания работы процесса LGWR
|
|||
|---|---|---|---|
|
#18+
1) Других транзакций не было и это не имеет значения 2) Естественно журналы переключаются при таком размере (512K) и таком количестве операторов - я же сказал, что 51 архивных файлов. 3) SCN определяется не в момент переключения журналов, а в момент когда элементы повтора помещаются в буфер журнала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2003, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32157502&tid=1990564]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 533ms |

| 0 / 0 |
