Я хочу запустить свою процедуру параллельно, поэтому использую пакет 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;
/