В основном временные сегменты создаются Oracle при выполнении операций сортировки. Кроме того, начиная с Oracle8i, глобальные временные таблицы создаются как временные сегменты. Сначала мы обсудим временные сегменты, получаемые во время сортировки. Операции сортировки выполняются Oracle во многих случаях, например, при создании индексов или использовании в операторах SQL операций order by, group by, distinct, union, intersect или minus. Сортировка запускается и при соединении сортировкой-слиянием, при выполнении команд analyze и во многих других случаях. Реальная сортировка проходит в оперативной памяти. Однако всем хорошо известно, что обычно объем данных превышает любые доступные размеры оперативной памяти, по крайней мере доступные для большинства из нас. Как же поступает Oracle при сортировке больших объемов данных? Когда выделенная для сортировки данных область заполняется, Oracle записывает отсортированные данные на диск, чтобы освободить оперативную память для сортировки новой порции данных. Эти временные сегменты в случае необходимости создаются Oracle в табличном пространстве TEMP, назначаемом пользователю. Как только сортировка заканчивается, Oracle прочитывает все эти временные сегменты (операция выборки) и представляет отсортированные данные приложению. После этого временные сегменты вычеркиваются. Вы спросите, как же эти временные сегменты могут создавать проблемы с конкуренцией, если всего лишь используются при сортировке, а затем уничтожаются?
Конкуренция временных сегментов
Помните, как несколько детей хотели иметь ту игрушку, которая есть у одно-
го из них? аналогичное происходит и в том случае, когда операция сор-
тировки создает временный сегмент, а затем (после своего завершения)
го из них? аналогичное происходит и в том случае, когда операция сор-
тировки создает временный сегмент, а затем (после своего завершения)
уничтожает его. Для создания и уничтожения любого сегмента базы данных процессу необходимо получить ресурс на постановку в очередь
транзакции управления памятью
(space management transaction (ST) enqueue). Это необходимо для того, чтобы операция обновления таблиц словаря данных выполнялась в последовательном режиме. Постановкой в очередь называется механизм в рамках Oracle для блокировки коллективно используемых ресурсов типа таблиц словаря данных. Вот она - та игрушка, о которой мечтают все дети! Во всей базе данных имеется только один ресурс постановки в очередь ST. Каждая связанная с управлением памятью процедура, например, выделение и освобождение экстентов или объединение свободного пространства (как с помощью фонового процесса SMON, так и вручную), должны получить ресурс постановки ST в очередь и сохранять его до тех пор, пока не закончится связанная с ним деятельность. Запросы на этот единичный ресурс увеличиваются, когда операции сортировки используют временные сегменты. Иногда, если такое ожидание становится чересчур длительным, Oracle выдает сообщение об ошибке "ORA-01575 - Timeout waiting for space management resource". He стоит и говорить, что лучшим решением для вопроса является экономия данного ресурса. А для этого нужно всего лишь сократить число событий управления памятью.Можно начать с проверки, использует ли база данных при выполнении сортировок дисковую память. Это делается так:
□ SQL> select Name, Value
2 from V$SYSSTAT
2 from V$SYSSTAT
where Name like ,%sort%';
NAME VALUE
NAME VALUE
sorts (memory) 77027
sorts (disk) 8471
sorts (rows) 138003699
3 rows selected. SQL>
Этот пример демонстрирует, сколько сортировок выполняется в памяти, а
сколько используют диск (и снова напоминаем, что эти данные являются нако-
пительными с момента последнего старта экземпляра). Кроме того, имеется
возможность увидеть полное число отсортированных строк. В приведенном вы-
ше примере довольно большое число сортировок использует диск. И хотя, ско-
рее всего, полностью устранить использование диска не удастся, его можно
значительно минимизировать, соответствующим образом скорректировав па-
раметры SORT_AREA_SIZE и SORT_AREA_RETAINED_SIZE. Желательно уста-
новить более высокие значения для сеанса, выполнив перед
запуском пакетного задания, в котором имеется много операций сортировок,
или перед построением большого индекса команду alter session set sort_area_
Эта команда действует только для конкретного сеанса и не затро-
нет другие сеансы, где тоже выполняются сортировки. Использование более
высоких значений параметра улучшит производительность
сортировки и в то же время уменьшит конкуренцию за ресурс постановки ST в
очередь.
сколько используют диск (и снова напоминаем, что эти данные являются нако-
пительными с момента последнего старта экземпляра). Кроме того, имеется
возможность увидеть полное число отсортированных строк. В приведенном вы-
ше примере довольно большое число сортировок использует диск. И хотя, ско-
рее всего, полностью устранить использование диска не удастся, его можно
значительно минимизировать, соответствующим образом скорректировав па-
раметры SORT_AREA_SIZE и SORT_AREA_RETAINED_SIZE. Желательно уста-
новить более высокие значения для сеанса, выполнив перед
запуском пакетного задания, в котором имеется много операций сортировок,
или перед построением большого индекса команду alter session set sort_area_
Эта команда действует только для конкретного сеанса и не затро-
нет другие сеансы, где тоже выполняются сортировки. Использование более
высоких значений параметра улучшит производительность
сортировки и в то же время уменьшит конкуренцию за ресурс постановки ST в
очередь.
Чтобы еще больше уменьшить динамическое выделение экстентов временных сегментов, можно конфигурировать табличные пространства временного типа и соответствующим образом устанавливать для них значения экстентов
initial
иnext.
Это стало возможно, начиная с Oracle 7.3. Для получения дополнительной информации об этой возможности и, в частности, о ее роли в операциях сортировки, обратитесь к разделу "Конфигурирование временных табличных пространств" главы "Настройка базы данных".Вспомните, что когда используются только временные табличные простран-
ства, для всего табличного пространства имеется лишь один временный сег-
мент и Oracle управляет им, используя алгоритм пула экстентов сортировки.
Oracle всегда записывает данные размером примерно во вре-
ства, для всего табличного пространства имеется лишь один временный сег-
мент и Oracle управляет им, используя алгоритм пула экстентов сортировки.
Oracle всегда записывает данные размером примерно во вре-
менный сегмент. Для определения размера экстентов
initial и next можно
воспользоваться следующей формулой:(SORT_AREA_SIZE в байтах)х(произвольное число в диапазоне от 1 до 4)
Замечание
Мы знаем множество источников документации, которые предлагают при задании значений по умолчанию экстентов
initial
иnext
для временных табличных пространств добавлять к определенному выше значению еще один блок базы данных. Хотя это и может иметь смысл для временных сегментов, создающихся в постоянных табличных пространствах, такиерекомендации становятся недействительными при - ,
использовании временных табличных пространств. Каждый
файл собирается стать на один блок больше (благодаря
наличию заголовка файла), так что если мы озабочены потерей
этого последнего экстента в файле данных из-за бесполезно
потраченного свободного пространства, то нужно прибавить
один блок к размеру файла данных, а не к каждому экстенту
временного сегмента.
Сохраните неизменными размеры экстентов
экстентов табличного пространства. Произвольное число выбирается для того,
чтобы размер экстента был достаточно велик для размещения в нем объема дан-
ных, крапюго Поскольку каждая сортировка состоит из двух
фаз - фазы сортировки и фазы выборки - полезно отметить, что SORT AREA
SIZE используется во время фазы сортировки, a SORT_ARFA_RETAINED_SIZI -
initial
иnext
и установитеpctinc-
rease
равным 0. Не забывайте, что мы хотим иметь одинаковые размеры для всехэкстентов табличного пространства. Произвольное число выбирается для того,
чтобы размер экстента был достаточно велик для размещения в нем объема дан-
ных, крапюго Поскольку каждая сортировка состоит из двух
фаз - фазы сортировки и фазы выборки - полезно отметить, что SORT AREA
SIZE используется во время фазы сортировки, a SORT_ARFA_RETAINED_SIZI -
во время фазы выборки.
< Предыдущая |
---|