Параметр PARALLEL_MIN_SERVERS можно абсолютно безопасно устано-
вить равным числу процессоров машины. Верхним пределом для этого парамет-
ра является значение PARALLELJV1AX_SERVERS которое, в свою очередь,
устанавливает максимальное число подчиненных процессов параллельного за-
проса. Вообще говоря, значение параметра можно
установить равным удвоенному числу процессоров, а иногда даже еще большим,
но эффективность подобного действия зависит от характеристик системы вво-
да/вывода и от количества данных, распределенных по различным томам.
вить равным числу процессоров машины. Верхним пределом для этого парамет-
ра является значение PARALLELJV1AX_SERVERS которое, в свою очередь,
устанавливает максимальное число подчиненных процессов параллельного за-
проса. Вообще говоря, значение параметра можно
установить равным удвоенному числу процессоров, а иногда даже еще большим,
но эффективность подобного действия зависит от характеристик системы вво-
да/вывода и от количества данных, распределенных по различным томам.
По мере увеличения спроса на подчиненные процессы параллельного запро-
са Oracle будет дополнительно инициировать такие процессы, но только до тех
пор, пока не превысится их максимальное количество, установленное парамет-
ром Если эти процессы заканчивают приписанную
им работу и остаются свободными, Oracle завершает их спустя определенное
время. Это время простоя может быть установлено (в минутах) с использовани-
ем параметра PARALLEL_SERVER_IDLE_TIME. Начиная с Oracle 8.1.3, такой
параметр был исключен, и теперь Oracle использует внутреннюю установку тай-
мера, которую нельзя изменить, применяя параметр инициализации. Заверше-
ние свободных подчиненных процессов параллельного запроса уменьшает
требования к системным ресурсам. Однако число таких процессов не должно
становиться меньше минимального, устанавливаемого параметром
PARALLEL_MIN_SERVERS. Значения параметров PARALLEL_MIN_SERVERS и
PARALLEL_MAX_SERVERS (см. раздел "Как использовать параллелизм") опре-
деляют
са Oracle будет дополнительно инициировать такие процессы, но только до тех
пор, пока не превысится их максимальное количество, установленное парамет-
ром Если эти процессы заканчивают приписанную
им работу и остаются свободными, Oracle завершает их спустя определенное
время. Это время простоя может быть установлено (в минутах) с использовани-
ем параметра PARALLEL_SERVER_IDLE_TIME. Начиная с Oracle 8.1.3, такой
параметр был исключен, и теперь Oracle использует внутреннюю установку тай-
мера, которую нельзя изменить, применяя параметр инициализации. Заверше-
ние свободных подчиненных процессов параллельного запроса уменьшает
требования к системным ресурсам. Однако число таких процессов не должно
становиться меньше минимального, устанавливаемого параметром
PARALLEL_MIN_SERVERS. Значения параметров PARALLEL_MIN_SERVERS и
PARALLEL_MAX_SERVERS (см. раздел "Как использовать параллелизм") опре-
деляют
пул серверов
выполнения.
Параметр играет очень важную роль. Он позво-
ляет установить минимальную степень параллелизма, при которой разрешается
выполнять запрос. Если система неспособна обеспечить требующийся минимум параллелизма (определенный в процентах от реальной степени параллелизм таблицы или индекса), запрос закончится аварийно. В этом случае можно либо вообще отказаться от выполнения операции, либо попытаться выполнить ее с меньшим числом подчиненных процессов параллельного запроса. Рассмотрим пример (для простоты мы несколько обрезали выход) получения значений параметров PARALLEL_MIN_SERVERS, PARALLEL_MAX_SERVERS и
PARALLEL_MIN_PERCENT:
/* The output from the following command has been formatted */
SVRMGR> show parameter parallel
NAME TYPE VALUE
parallel jirax.servers integer 8
paralleljnin.percent integer 50
parallel jrrin_servers integer 4
Предположим, что шесть из максимально разрешенного числа (8) подчиненных процессов параллельного запроса заняты. Мы просто представили запрос, в котором запрашивается какая-то степень параллелизма, допустим, шесть. Oracle может инициировать только два дополнительных процесса, после чего будет достигнуто пороговое значение числа разрешенных процессов. Но так как PARALLEI,_MIN__1'KR(.1EN"I установлен равным 50% (т. е. для запуска запроса в параллельном режиме требуется по крайней мере три подчиненных процесса параллельного запроса), то запустить еще три дополнительных процесса невозможно, и Oracle подымет флаг ошибки с кодом ORA-12827, как это показано в следующем примере:
□ SQL> select /*+ PARALLEL (CM, 6) * / count (*) from CUSTOMER_MASTER CM where Customer_Bi'll_Num is not null; select /*+ PARALLEL (CM, 6) */ count (*) *
ERROR at line
ORA-12827: insufficient parallel query slaves available
Если PARALLEL_M1N_PERCENT был оставлен равным его значению по умолчанию (0) и при этом был достигнут верхний предел разрешенного числа подчиненных процессов параллельного запроса, который ранее был установлен равным PARALLEL_MAX_SERVERS, любой новый запрос, требующий параллелизма, будет выполняться последовательно и поэтому очень медленно (как будто РС*не был активизирован). Итак, внезапно запрос, который раньше намного быстрее выполнялся с использованием параллелизма, начал выполняться значительно медленнее и стал требовать для своего завершения больше времени. А вы не желаете этого замечать до тех пор, пока кто-то не скажет вам об этом грустном факте или мониторинг системы не совпадет (случайно) с выполнением данного запроса.
Вы и в самом деле хотите выполнять его в параллельном режиме или откажетесь вообще? Если да, тогда можете установить PARALLEL_MIN_PERCENT равным его максимальному значению (100) и будьте уверены, что либо запрос будет выполняться с положенной ему степенью параллелизма, либо не будет выполняться вообще. Однако требования приложения подскажут, что является приемлемым в таких ситуациях. Мы считаем, что будет лучше, если мы проинформируем читателей обо всех доступных опциях конфигурирования и о
том, как они работают. Вообще, если речь идет о промышленной системе, никто не захочет, чтобы запросы завершались аварийно, поэтому лучше установить этот параметр равным 0 или очень малому числу.
Есть еще один параметр, о котором читателю необходимо знать, -OPTIMIZERJPERCENTJPARALLEL. Он влияет на поведение стоимостного оптимизатора при определении пути выполнения. Как и в случае с значение этого параметра подсказывает оптимизатору, о какой степени параллелизма может идти речь при определении стоимости плана выполнения для запроса. Возможный диапазон изменения значений этого параметра - от 0 до 100. Значение по умолчанию - 0. Более низкие значения параметра указывают на тенденцию предпочтения последовательных планов выполнения посредством индексированного доступа, в то время как высокие значения указывают на склонность к сканированию полной таблицы. Очевидно, что полном сканировании таблицы преимущества параллелизма гораздо более заметны и измеримы.
Oracle8i ввел и еще один новый параметр - PARALLE L AUTOM ATI С TUNING. Он может принимать значения TRUE или FALSE. Значение по умолчанию равно FALSE. Если установить его на TRUE, Oracle будет автоматически определять значения всех остальных связанных с ним параметров. Помимо прочего, при этом будет установлен на TRUE параметр
MULTI_USER, что даст Oracle возможность отменять заданные пользователями подсказки, чтобы поддерживать производительность системы в приемлемых пределах. Именно АБД должен установить степень параллелизма на уровне таблицы. Звучит просто и восхитительно, не так ли? Но когда вы задаете этот параметр как TRUE, не устанавливая другие параметры, Oracle определит PARALLEL MEN SERVERS и PARALLEL MEN PERCENT как 0, а значение PARALLEL_MAX_SERVER5: - в диапазоне от 40 до чудовищного 160 в зависимости от аппаратной платформы. Причем оба эти значения довольно высоки для данной среды. Так что используйте эти параметры с осторожностью и только • после тщательного тестирования.
< Предыдущая | Следующая > |
---|