DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Создание и развенчание мифа о переносах


Печатная документация из многих надежных источников Oracle полагает,
что перенос происходит в случае, если транзакция пишет обратно в первый эк-
стент сегмента отката. Это не так. Каждая транзакция пишет в выделенные эк-
стенты сегмента отката упорядоченным и циклическим способом.
Выделенными (первоначально) называются те экстенты, которые назначены
сегменту отката при его создании с использованием параметра        Мини-
мальное число экстентов при создании сегмента отката равно двум.
Когда экстент заполняется элементами отмены, Oracle продолжает писать в
следующий доступный экстент. Счетчик таких записей образа до обновления за
границы экстента одной и той же транзакцией называется переносом и записы-
вается в столбец 

wraps 

представления        Говоря проще, 

wraps 

означа-
ет количество переходов транзакцией границ экстента при записи образа до
обновления в сегмент отката. Полезно знать, что столбец 

extends 

имеет отноше-
ние к тому, сколько раз сегмент отката расширялся путем выделения одно­го или нескольких экстентов сверх 

minextenh 

со времени последнего запуска экземпляра.
Данные ниже распечатки кодов и выходных данных собраны из проводив­шегося нами теста для подтверждения определения 

wraps 

и 

extends, 

приведенно­го в предыдущем параграфе. Начнем с онлайнового сегмента отката 

rbs02 

(отличного от системного сегмента отката), который был конфигурирован со значением 2 параметра 

minextents. 

Этот сегмент идентифицируется значением 2 в столбце usn представления V$ROLLSTAT. Затем мы выберем таблицу, в кото­рой миллион строк, и будем удалять из нее строки в рамках одной транзакции.
После нескольких удалений столбец 

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, самое время выяснить, имеется ли в базе данных конкуренция за хранящуюся в сег­менте отката информацию.
 


Продажа недорогих диванов, диван кликкляк 10000. Милорд! . Лысые мокрые письки и пилотки. Мокрые письки смотреть и качать бесплатно.







jAntivirus