Rollback Segments.
При изменении информации в базе данных в результате транзакций в Rollback
Segments сохраняется информация отмены. При создании базы данных в табличном
пространстве SYSTEM автоматически создается сегмент отката с именем SYSTEM.
ORACLE старается использовать сегмент отката SYSTEM лишь для специальных
системных транзакций. Количество сегментов отката, которое необходимо создавать,
зависит от числа транзакций, выполняющихся одновременно.
Несколько транзакций могут конкурировать между собой за Rollback Segments.
Узнать ухудшает ли эта конкуренция производительность можно, анализируя
системную таблицу V$WAITSTAT, столбцы:
UNDO HEADER - число ожиданий буферов, содержащих блоки заголовков сегментов
отката, отличных от сегмента отката SYSTEM.
UNDO BLOCK - число ожиданий буферов, содержащих блоки, отличные от блоков
заголовков для сегментов отката, отличных от сегмента отката SYSTEM.
SYSTEM UNDO HEADER - число ожиданий буферов, содержащих блоки
заголовков сегмента отката SYSTEM.
SYSTEM UNDO BLOCK - число ожиданий буферов, содержащих
блоки, отличные от блоков заголовков сегмента отката SYSTEM.
Запрос 1.
SELECT class, count
FROM V$WAITSTAT
WHERE class IN ('undo header', 'undo block', 'system undo header',
'system undo block');
3апрос 2.
SELECT SUM(value)
FROM v$sysstat
WHERE name IN ('db block gets', 'consistent gets');
Если число ожиданий любых блоков Rollback Segments (запрос 1) к общему числу
запросов (запрос 2) превышает 1%, то надо увеличить число Rollback Segments при
помощи конструкции следующего вида:
CREATE PUBLIC ROLLBACK SEGMENT Имя сегмента отката
TABLESPACE Имя табличного пространства
STORAGE (
INITIAL 100K
NEXT 100K
OPTIMAL 1500K
MINEXTENTS 10
MAXEXTENTS 100);
Причем при создании сегментов отката надо придерживаться следующих формул:
Размер Rollback Segments = Размер самой большой таблицы базы данных / 10
Число экстентов = MINEXTENTS = 10
Размер экстента = INITIAL = NEXT = Размер Rollback Segments / Число экстентов
OPTIMAL >= INITIAL + (NEXT * (MINEXTENTS - 1))
Прежде чем транзакции смогут использовать созданный сегмент отката, его
необходимо перевести в состояние ONLINE следующей командой:
ALTER ROLLBACK SEGMENT Имя сегмента отката ONLINE;