Parallel Query Option (PQO)

Оценить
(0 голоса)

До появления PQO все работа выполнялась на стороне процесса приложения его теневым процессом. Главное заключался в том, что в выполнении запроса участие принимал только один ЦП, что приводило к очень продолжительным временам выполнения тех запросов, которые получали большие наборы данных.

Характерной особенностью PQO является то, что при выполнении одного запроса удается подключить несколько процессоров, что также повышает степень параллелизма операций ввода/вывода при обработке. PQO организовывает такой параллелизм путем делегирования задачи чтения данных множеству query slaves - подчиненных запросов.

Несмотря на то, что наше обсуждение не фокусируется на RAC (Real Application Clusters - кластерах реального приложения), известными ранее как Oracle Parallel Server, или OPS, позвольте все же заметить, что RAC расширяет параллелизм на множество систем, дополнительно делегируя возможности параллельной обработки экземплярам, выполняющимся на различных серверах и подключенным к одной и той же БД.

Сканирования таблиц

Простым случаем распараллеливания запроса является сканирование таблицы, при котором происходит получение всех строк таблицы. Одиночное сканирование таблицы может удовлетворить требования простого запроса; сложный запрос может использовать сканирование таблицы только в качестве одного шага в плане запроса.

Предположим, например, что пользователь выполняет следующий оператор SQL:

Select  from CUSTOMER;

Результатом станет полное сканирование таблицы CUSTOMER. На рисунке 9.4 приведена модель процессов, используемая PQO для сканирования таблицы со степенью параллелизма 4.

При выполнении запроса PQO приложением пользователя теневой процесс действует в качестве query coordinator - координатора запроса, динамически вызывая множество подчиненных запросов для каждого получения подмножества блоков данных из таблиц БД. Кроме чтения данных подчиненные запросы оценивают любые уместные (относящиеся к делу) предикаты запросов, чтобы исключить ненужные строки перед передачей итогового набора координатору запроса. Он преобразует данные, полученные от каждого подчиненного запроса, и выполняет любую необходимую конечную обработку перед передачей результатов пользовательскому приложению.

Количество подчиненных запросов, назначенных любому запросу, определяется степенью параллелизма последнего. Степень параллелизма может быть установлена для каждой таблицы, что и показано в следующем примере:

alter table CUSTOMER parallel (degree 12);

Для таблицы может быть запрещен параллелизм запросов, как показано в следующей команде:

alter table REGION noparallel;

Любые установки таблицы могут быть замещены с помощью контекстной подсказки запроса PARALLEL, например:

select /*+ PARALLEL(customer, 12) */

NAME, ADDRESS, BALANCEOWING from CUSTOMER;

В качестве альтернативного варианта параллелизм может быть запрещен: например, если таблица слишком мала, чтобы воспользоваться преимуществами параллелизма, что и показано в следующем примере:

select /*+ NOPARALLselect /*+ NOPARALLEL(region) */

* from REGION;

Степень параллелизма
Сканирование таблиц с сортировкой
Другие возможности параллелизма
Создание индекса
Восстановление БД

Добавить комментарий


Защитный код
Обновить