Печатная документация из многих надежных источников Oracle полагает,
что перенос происходит в случае, если транзакция пишет обратно в первый эк-
стент сегмента отката. Это не так. Каждая транзакция пишет в выделенные эк-
стенты сегмента отката упорядоченным и циклическим способом.
Выделенными (первоначально) называются те экстенты, которые назначены
сегменту отката при его создании с использованием параметра Мини-
что перенос происходит в случае, если транзакция пишет обратно в первый эк-
стент сегмента отката. Это не так. Каждая транзакция пишет в выделенные эк-
стенты сегмента отката упорядоченным и циклическим способом.
Выделенными (первоначально) называются те экстенты, которые назначены
сегменту отката при его создании с использованием параметра Мини-
мальное число экстентов при создании сегмента отката равно двум.
Когда экстент заполняется элементами отмены, Oracle продолжает писать в
следующий доступный экстент. Счетчик таких записей образа до обновления за
границы экстента одной и той же транзакцией называется переносом и записы-
вается в столбец
ет количество переходов транзакцией границ экстента при записи образа до
обновления в сегмент отката. Полезно знать, что столбец
ние к тому, сколько раз сегмент отката расширялся путем выделения одного или нескольких экстентов сверх
следующий доступный экстент. Счетчик таких записей образа до обновления за
границы экстента одной и той же транзакцией называется переносом и записы-
вается в столбец
wraps
представления Говоря проще,wraps
означа-ет количество переходов транзакцией границ экстента при записи образа до
обновления в сегмент отката. Полезно знать, что столбец
extends
имеет отноше-ние к тому, сколько раз сегмент отката расширялся путем выделения одного или нескольких экстентов сверх
minextenh
со времени последнего запуска экземпляра.Данные ниже распечатки кодов и выходных данных собраны из проводившегося нами теста для подтверждения определения
wraps
иextends,
приведенного в предыдущем параграфе. Начнем с онлайнового сегмента откатаrbs02
(отличного от системного сегмента отката), который был конфигурирован со значением 2 параметраminextents.
Этот сегмент идентифицируется значением 2 в столбце usn представления V$ROLLSTAT. Затем мы выберем таблицу, в которой миллион строк, и будем удалять из нее строки в рамках одной транзакции.После нескольких удалений столбец
мым, что процесс сервера продвинулся до экстента в сегменте отката.
Столбец
ным 2 (обратите внимание на разницу между
ния числа удалений продолжает расти значение в столбце
wraps
увеличится до 1, означая тем са-мым, что процесс сервера продвинулся до экстента в сегменте отката.
Столбец
extends
остается равным 0, а значениеextents
в сегменте становится рав-ным 2 (обратите внимание на разницу между
extends
иextents).
По мере увеличе-ния числа удалений продолжает расти значение в столбце
writes.
В результатетретьего (окончательного) набора удалений выделяется третий экстент для сегмента отката и увеличивается число экстентов
(extents)
до 3, число переносов(writes)
- до 2, а число расширений(extends) -
до 1. Мораль сей истории: Wraps увеличивается на 1 каждый раз, как только транзакция начинает запись через границы экстента. Вот доказательство:О Rem Run the first set of deletes and look at the rollback segment Rem statistics.
SVRMGR> select Usn, Extents, Wraps, Extends, Writes
2> from V$R0LLSTAT;
USN EXTENTS WRAPS EXTENDS WRITES
0 8 0 0 1976
2 2 0 0 81605
2 rows selected.
Rem Run the second set of deletes and look at the rollback segment Rem statistics.
SVRMGR> select Usn, Extents, Wraps, Extends, Writes 2> from V$ROLLSTAT; USN EXTENTS WRAPS EXTENDS WRITES
0 8 0 0 1976
2 2 10 204173
2 rows selected.
Rem If you go by various documentation that defines what a wrap is, Rem we should not wrap until we rewrite over the first extent.
Rem That is impossible in the above scenario as there is only 1 flem transaction in our database and we are the only one using this fiem rollback segment. We have just started writing to the second Rem extent of the rollback segment and wraps rose to 1.
Run the third set of deletes and look at the rollback segment Rem statistics.
SVRMGR> select Usn, Extents, Wraps, Extends, Writes 2> from V$ROLLSTAT;
USN EXTENTS WRAPS EXTENDS WRITES
0 8 0 0 1976
2 2 10 665350
2 rows selected.
Rem No extends or wraps this time, as all of the undo entries Rem fit into the current extent. However, the number of writes Rem has increased showing that we are still writing undo entries.
Rem Run the last set of deletes and look at the rollback segment
Rem statistics.
SVRMGR> select Usn, Extents, Wraps, Extends, Writes
2> from V$ROLLSTAT;
USN EXTENTS WRAPS EXTENDS • WRITES
0 8 0 0 1976
- 2 3 2 1 716940
2 rows selected.
Rem Bingo, now you see the number of extents at 3 and the number Rem of extends at 1.
Практический результат состоит в том, что когда нет доступных экстентов для продолжения записи информации об отменах изменений, Oracle будет выделять (добавлять) к сегменту отката новые экстенты, используя при этом параметр
next_extent_size
Это засвидетельствовано в столбцеextends
представления V$ROLLSTAT. Oracle расширяет выделенный сегменту отката размер. Ситуация в точности такая же, что имеет место, когда динамически увеличивается размер таблиц или индексов, если во время работы они выходят за пределы отведенного ими пространства. В один экстент могут делать записи несколько транзакций, но, тем не менее, каждый блок сегмента отката в каждый момент времени содержит информацию только из одной транзакции.Когда результаты транзакции фиксируются (если в блоке отмены доступны хотя бы 400 байт), он помещается в пул свободных блоков и другая транзакция может писать в ставшее доступным пространство блока (это верно, по крайней мере, для Oracle 7.3). Процесс продолжится до тех пор, пока свободное пространство в блоке не станет меньше 400 байт. Теперь, когда мы узнали, что такое сегмент отката, зачем он используется и как он используется Oracle, самое время выяснить, имеется ли в базе данных конкуренция за хранящуюся в сегменте отката информацию.
| < Предыдущая | Следующая > |
|---|


