Параллельные подсказки в операторе «Select Into» в PL / SQL - PullRequest
0 голосов
/ 11 октября 2018

Параллельные подсказки в обычных запросах SQL DML в Oracle можно использовать следующим образом

 select /*+ PARALLEL (A,2) */  * from table A ;

Аналогичным образом мы можем использовать параллельные подсказки в PL / SQL для выбора операторов в Oracle?

  select /*+ PARALLEL(A,2) */ A.* BULK COLLECT INTO g_table_a from Table A ;

Если я использую приведенный выше синтаксис, есть ли способ проверить, выполняется ли вышеуказанный оператор select параллельно?

Редактировать: Предполагая, что g_table_a является структурой табличных данных таблицы ROWTYPE

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Если оператор занимает короткое время, вы не хотите запускать его параллельно .Обратите внимание, что, например, выполнение запроса, скажем, 0,5 секунды при последовательном выполнении, может занять 2,5 секунды параллельно, так как наибольшая нагрузка - на настройку параллельного выполнения.

Итак, если запрос занимает много времени, у вас естьдостаточно времени для проверки V$SESSION (используйте gv$session в RAC) и просмотра всех сеансов с пользователем, выполняющим запрос.

select * from gv$session where username = 'your_user'

Для последовательного выполнения вы видите только один сеанс, для параллельного выполнения вы видите один координатор и дополнительный сеанс до удвоенной выбранной параллельной степени.

Альтернативно используйте v$px_session, которыйсвязывает параллельные рабочие сеансы с координатором запросов.

 select SID, SERIAL#, DEGREE, REQ_DEGREE 
 from v$px_session 
 where  qcsid = <SID of the session running teh parallel statement>;

Здесь вы также видите требуемую степень параллелизма и реально используемую DOP

0 голосов
/ 11 октября 2018

Вы можете легко проверить это в объяснительном плане запроса.В случае Plsql вы также можете отслеживать процедуру и проверить ее в файле TKprof.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...