В Oracle 7.3 впервые появилась концепция чистых временных табличных пространств, а в команду create tablespace была добавлена фраза temporary. Введение чисто временных табличных пространств являлось важным с двух точек зрения. Во-первых (что самое главное), они поддерживали возможность разрешить прямую запись на диск при сортировке. Это было сделано путем конфигурирования параметра инициализации SORT_DIRECT_WRITES (исключен в OracleSi). Если он был установлен на TRUE, каждая сортировка, большая по размеру, чем SORT_AREA_SIZE, непосредственно записывалась во временное табличное пространство. Значит, буферный кэш базы данных больше не использовался для сегментов сортировки, а применялся только для данных, индексов, кластеров и сегментов отката.
Второй аспект заключался в изменении поведения временных табличных пространств и временных сегментов в Oracle 7.3. Это изменение снижало накладные расходы и уменьшало частоту возникновения узких мест для сред, которые генерируют активную деятельность во временных табличных пространствах.
До Oracle 7.3 накладные расходы возникали всякий раз, когда процессу сервера требовалась временная память (для сортировок при выполнении итоговых операций, выполнения фраз
group by, order by,
соединений, создания индексов и т. д.) в размере, большем, чем SORT_AREA_SIZE, так как процесс выделял (создавал) временный (temp) сегмент во временном табличном пространстве (как это было определено при создании пользователя или позже при его модификации). После завершения операции сортировки временный сегмент освобождался (сбрасывался). Это обычно были напрасно потраченные усилия, потому что следующий процесс, которому требовалась временная память в размере, превышающем SORT_AREA_SIZE, был вынужден снова выделять временный сегмент только для того, чтобы освободить его по окончании сортировки. Основная проблема заключалась в недостаточном повторном использовании временных сегментов для нескольких операций сортировки.В Oracle 7.3 с его чистыми временными табличными пространствами первый процесс, которому после старта экземпляра требовалась временная память болыпая, чем SORT_AREA_SIZE, выделял себе временный сегмент во временном пространстве, а затем предоставлял для этого временного сегмента столько экстентов, сколько было необходимо. Когда первый процесс заканчивал действия по сортировке, он оставлял временный сегмент для его использования другими операциями сортировки. Следующие процессы увеличивали размер этого временного сегмента (чьи характеристики памяти определялись фразой памяти по умолчанию команды create tablespace, с помощью которой создавалось
табличное пространство TEMP).
Память в данном временном сегменте поддерживалась с помощью алгоритма пула экстентов сортировки (который все еще использовался словарем Вот почему в каждый момент времени временного табличного пространства имелся всего один временной сегмент. Память этого временного сегмента освобождается процессом SMON при остановке
(shutdown)
или запуске(startup)
экземпляра (в зависимости от обстоятельств и от типа командыshutdown immediate
или
abort).
В были добавлены новые динамические представления про-изводительности V$SORT_USAGE для предоставления информации о характеристиках использования временных табличных пространств.
Замечание
В зависимости от числа пользователей системы можно рассмотреть вопрос о создании нескольких временных табличных пространств, чтобы единственное такое пространство не стало источником узких мест.
< Предыдущая | Следующая > |
---|