DBMS_PARALLEL_EXECUTE.run_task не запускает параллельные задания - PullRequest
0 голосов
/ 27 мая 2020

Я хочу запустить свою процедуру параллельно, поэтому использую пакет DBMS_PARALLEL_EXECUTE. Однако я столкнулся с проблемой в одном случае, и проблема в том, что мои рабочие места не начинаются. Сессия ожидает события PL/SQL Lock Timer, и ничего не происходит. Параметр job_queue_processes установлен на 64. Я установил для параметра parallel_level значение NULL, чтобы разрешить Oracle установить степень параллелизма, но это не помогло.

Я на Oracle 11gR2, одиночный экземпляр.

Вопросы : - Есть ли уловки, чтобы проверить, не соответствует ли такой подход каким-либо требованиям? Может быть, какие-то user_* просмотров? - Может быть, есть какие-то запущенные задания, которые «потребляют» мой job_queue_processes?

Мой фрагмент кода:

DECLARE
  l_task_name VARCHAR2(100) := 'update_data';
  l_splitter  VARCHAR2(4000) := '
select level, level from dual connect by level <= 16';
  l_exec_stmt VARCHAR2(1000) := 'begin update_data(:start_id, :end_id); end;';
BEGIN
  FOR line IN (SELECT d.task_name
                 FROM user_parallel_execute_tasks d
                WHERE d.task_name = l_task_name)
  LOOP
    dbms_parallel_execute.drop_task(task_name => line.task_name);
  END LOOP;

  dbms_parallel_execute.create_task(l_task_name);
  dbms_parallel_execute.create_chunks_by_sql(task_name => l_task_name
                                            ,sql_stmt  => l_splitter
                                            ,by_rowid  => FALSE);

  dbms_parallel_execute.run_task(l_task_name
                                ,l_exec_stmt
                                ,dbms_sql.native
                                ,parallel_level => NULL);

  COMMIT;

END;
/

1 Ответ

0 голосов
/ 28 мая 2020

Наконец, администраторы баз данных сказали мне, что в конце концов мои задания начались и успешно работали.

Итак, ответ основан на рекомендациях из комментариев:

  • Проверьте свой job_queue_processes параметр DB чтобы узнать, разрешено ли запускать задания;
  • Проверьте запущенные задания планировщика через dba_scheduler_running_jobs или v$scheduler_running_jobs, чтобы найти задания, которые «потребляют» ваш параметр job_queue_processes и не позволяют запускать ваш процесс;
  • Проверьте alert.log вашей базы данных, чтобы увидеть, не произошло ли что-то непредвиденное с вашей базой данных.

Также имейте в виду Do c ID 1916579.1 . В этом do c указано, что при запуске DBMS_PARALLEL_EXECUTE заданий в Oracle DB без исправлений происходит ухудшение работы. Даже эта ошибка очень старая (в Basi c 12.2.0.1.0 есть исправления), рассмотрите возможность проверки, установлена ​​ли она на вашем экземпляре.

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