Совсем немного о сортировке

dbstalker, 20 октября

Сейчас очень упрощенно о сортировке. Сортировку в основном порождают: операторы Create Index, Select .... Order By, Distinct, Group By, Union, а также неиндексированные соединения.

Оракл пытается выполнить сортировку в памяти. Если памяти недостаточно, то выполняется дисковая сортировка. Дисковая сортировка использует временное табличное пространство (temporary tablespace). Нужно учитывать, что это приводит к интенсивному использованию операций ввода-вывода, конкуренции с прочей дисковой активностью, и как следствие - к существенному замедлению работы базы данных. Поэтому, чем больше памяти получает сортировка, тем лучше.

Однако в документации читаем: «Увеличение размера области сортировки заставляет каждый процесс ORACLE, выполняющий сортировку, распределять большее количество памяти. Это сокращает объем памяти, доступный для личных областей SQL и PL/SQL. Оно может также отразиться на общем распределении памяти операционной системой и повлечь за собой страничный обмен или свопинг. Прежде, чем увеличивать размер области сортировки, убедитесь, что в вашей операционной системе достаточно памяти, чтобы удовлетворить вашим возросшим потребностям.»

В зависимости от размера памяти, выделенной для сортировки, различают три варианта выполнения сортировки: optimal, one -pass, multi –pass.

Предположим Вам нужно отсортировать некоторый набор данных. В Вашей базе данных достаточно памяти и весь набор данных будет отсортирован в памяти. Это сортировка - optimal. В этом случае сортировка выполняется быстро, не используются медленные операции ввода-вывода на диск. Это самый лучший вариант.

У Вас не так много памяти, чтобы сортировка выполнилась в режиме optimal. В этом случае оракл разбивает набор данных на несколько частей, сортирует их последовательно, записывая каждую порцию на диск (temporary tablespace). Затем начинается процесс слияния отсортированных частей. Если ораклу удалось слить воедино весь набор за один раз – получаем вариант one –pass сортировки.

Если же память на столько мала, что за один раз слить весь набор ораклу не удается, то приходится делать слияние в несколько этапов. Это уже multi –pass.

Какая у Вас сортировка чаще происходит можно посмотреть так:

select * from v$sysstat where name like 'workarea executions%'

Значительное количество дисковых сортировок демонстрирует отсутствие индексов, некорректное конфигурирование PGA, неоптимальные операторы SQL. Уменьшение дисковых сортировок произойдет тогда, когда будет выделен достаточный размер памяти под сортировку.

Источник1 Источник2

Тэги: PGA, общее

ОднаКнопка

 

Новый комментарий

Я не спамер: введите суму 7+4



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Телепрограмма
23 июня, 1 ответа
Турция
23 июня, 4 ответа
Выбор люстры
22 июня, 1 ответа