Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Продолжение глубого понимания работы процесса LGWR / 15 сообщений из 15, страница 1 из 1
08.05.2003, 21:30
    #32156507
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
В качестве опыта был написан и запущен следующий скрипт:
Код: plaintext
1.
2.
3.
4.
5.
6.
begin
 for i in  1 .. 100000  loop
  insert into alltab(table_name,owner) values(i||' '||sysdate,'SYS');
 end loop;
end;
/


Замечу сразу, что 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           Кол-во опер. insert на данный SCN
 --------------   ---------------------------------
 
    1137853            1 
    1137854            3 
    1137855            1 
    1137856            2 
    1137857            1 
    1137858            2 
    1137859            1 
    1137860            2 
    1137861            3 
    1137862            1 
    1137863            2 
    1137864            1 
    1137865            4 
    1137866            1 
    1137867            4 
    1137868            1 
    1137869            4 
    1137870            1 
    1137871            4 
   ..................
    1138832           43 
    1138833          108 
    1138834          152 
    1138835           69 
    1138836          160 
    1138837          100 
    1138838           25 
    1138839          125 
    1138840          144 
    1138841          116 
    1138842          120 
    1138843          139 
    1138844           76 
    1138846          130 
    1138847          130 
    1138848          130 
    1138849           16 
    1138850          112 
    1138851          148   


Делаем вывод, что реально SCN присваивается не
каждой отдельной транзакции, а группе операторов в транзакции.
Причём с первого вгляда понять логику - на какое количество операторов
в транзакции присваивается SCN трудно.
Я предполагаю, что на каждый сброс из буффера журнала повторов.

Народ, прокомментируйте кто как сможет.
...
Рейтинг: 0 / 0
12.05.2003, 08:00
    #32157108
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Один из серьезных курьезов в Oracle - это не точное понимание аббревиатуры SCN, поскольку это не одно а три разных по сути понятия:

SCN - Sytem Commit Number
SCN - System Checkpoint Number
SCN - System Change Number

В данном контексте мне видится что SCN означает - System Change Number, который используется Oracle как механизм внутренних блокировок. Этот номер увеличивается (счетчик) вне зависимости был выполнен commit или нет.
...
Рейтинг: 0 / 0
12.05.2003, 09:04
    #32157125
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
То что это именно "system change number" у меня сомнений нет.
Код: plaintext
1.
2.
3.
4.
Oracle8i Reference Release  2  ( 8 . 1 . 6 )
V$LOGMNR_CONTENTS
This view contains log history information.
SCN NUMBER( 15 ) The system change number


Поэтому вопрос остаётся открытым, по какому принципу происходит присвоение значения?

to ShgGena: Дай пример какой-нибудь таблицы, вью в котором есть столбец с именем "SCN" и это означает любое из:
SCN - Sytem Commit Number
SCN - System Checkpoint Number
...
Рейтинг: 0 / 0
12.05.2003, 12:44
    #32157368
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Все SCN в оракле используют одну и ту же последовательность. Разница в моментах времени, когда происходит изменение этой последовательности. При коммите назначается system commit number. Он же пишется в транзакционную таблицу блока и сегмента отката для пометки завершенности транзакции. System checkpoint number - это номер изменения системы, на который надо проводить синхронизацию, по окончании чекпойнта он прописывается в заголовки датафайлов. А в промежутках между коммитами, чекпойнтами и т.д. оракл проводит свои внутренние операции, которые помечаются как system change number. Поэтому различить их достаточно сложно.
...
Рейтинг: 0 / 0
12.05.2003, 13:19
    #32157439
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
"А в промежутках между коммитами, чекпойнтами и т.д. оракл проводит свои внутренние операции, которые помечаются как system change number. "

Ты наставиваешь на том, что именно внутренние?
...
Рейтинг: 0 / 0
12.05.2003, 14:07
    #32157502
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
В ОраМаг должна выйти (или уже вышла) статья Павла Шендрыгайлова "Что хранят редо-логи". Как раз на эту тему.
...
Рейтинг: 0 / 0
12.05.2003, 14:15
    #32157511
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Да, интересно было бы почитать. Но вроде пока нет.
А он тебе на сайт еще не бросил?
...
Рейтинг: 0 / 0
12.05.2003, 14:17
    #32157518
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Есть сомнения? В принципе, всю эту внутреннюю кухню и не надо знать. Какая разница, что означает scn, если он уникально определяет закоммиченную транзакцию? До коммита на scn ориентироваться нельзя, что опять-таки показывает ваш эксперимент - его просто нет. До фиксации уникальным идентификатором транзакции является положение транзакции в сегменте отката (поэтому одна транзакция и не может распределяться по разным сегментам отката). Это можно проверить по колонкам в v$logmnr_contents, относящимся к сегменту отката - xidusn, xidslt, xidsqn. Кстати, почему-то вы не посмотрели на столбец cscn - это как раз scn коммита.

Можно также сделать дампы блоков и посмотреть как занимаются транзакционные слоты, когда появляется номер коммита, как выставляются блокировки и т.п. Один раз это даже интересно сделать. Команда очень простая

alter system dump datafile {'filename'}|{fno} block {blockno}|block min {blockno} block max {blockno}.

Надеюсь, синтаксис понятен. Команда недокументирована, поэтому на вопросы о ней отвечать не буду.
...
Рейтинг: 0 / 0
12.05.2003, 14:26
    #32157529
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
to Al: из вышесказано, меня заинтересовала мысль, что
"До фиксации уникальным идентификатором транзакции является положение транзакции в сегменте отката"

Вы хотите сказать что номер SCN для операторов в транзакции определяется положением в сегменте отката?
А что у сегментов отката уникальные номера в течении всей жизни БД?

Замечу что вызывает какое-то внутреннее несогласие фраза "положение транзакции в сегменте отката".
...
Рейтинг: 0 / 0
12.05.2003, 15:17
    #32157611
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Я буду ориентироваться на имена колонок в 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).

Замечу что вызывает какое-то внутреннее несогласие фраза "положение транзакции в сегменте отката".

Извините, ораклу наплевать на это.
...
Рейтинг: 0 / 0
12.05.2003, 15:30
    #32157629
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
to AI: спасибо конечно за большой обьём информации.
Но она несколько избыточна. По сути же очень мало. Только без обид, но меня интересует только SCN - system change number.

Я понял твою мыслю так, что один и тот-же SCN присваивается операторам, информация отмены для которых помещается в один сегмент?

То есть возвращаясь к моему примеру, и исходя из твоих слов - для транзакции было выделено 947 сегментов отката?
...
Рейтинг: 0 / 0
12.05.2003, 16:02
    #32157719
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Но она несколько избыточна. По сути же очень мало. Только без обид, но меня интересует только SCN - system change number.

То, что я написал - просто транзакционная архитектура оракла. Ориентироваться на scn в ней просто нельзя.

Я понял твою мыслю так, что один и тот-же SCN присваивается операторам, информация отмены для которых помещается в один сегмент?

Я этого не писал. Перечитай еще раз.

То есть возвращаясь к моему примеру, и исходя из твоих слов - для транзакции было выделено 947 сегментов отката?

Еще раз - scn это просто отметка о каком-то изменении состояния системы. В твоем примере под транзакцию был выделен только один сегмент отката, но в ходе выполнения транзакции система сменила свое состояние 947 раз. Ведь были невидимые транзакции в словаре типа выделения экстентов, переноса hwm, модификаций заголовков файлов от чекпойнтов, которые тоже приводили к увеличению scn.
...
Рейтинг: 0 / 0
12.05.2003, 16:10
    #32157735
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Ok, тогда забудем всё что ты сказал. И снова вернёмся к моему вопросу:
Код: plaintext
1.
2.
3.
4.
5.
Делаем вывод, что реально SCN присваивается не 
каждой отдельной транзакции, а группе операторов в транзакции. 
Причём с первого вгляда понять логику - на какое количество операторов 
в транзакции присваивается SCN трудно. 
Я предполагаю, что на каждый сброс из буффера журнала повторов. 


Как присваивается SCN?
...
Рейтинг: 0 / 0
15.05.2003, 11:14
    #32160349
Andrew Campball
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
Возможно у Вас в момент вставки были активны другие транзакции, что вызвало переключение журналов повторов. При переключении журналов
SCH соответсвенно увеличивается.

Получается, что вы пишите транзакцию, журнал кончается на 1, 4 или более insert'ов
перключается журнал и увеличивается SCH.
...
Рейтинг: 0 / 0
15.05.2003, 11:23
    #32160369
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение глубого понимания работы процесса LGWR
1) Других транзакций не было и это не имеет значения
2) Естественно журналы переключаются при таком размере (512K) и таком количестве операторов - я же сказал, что 51 архивных файлов.
3) SCN определяется не в момент переключения журналов, а в момент когда элементы повтора помещаются в буфер журнала
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Продолжение глубого понимания работы процесса LGWR / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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