В базе Oracle есть расчетный параметр aq_tm_processes, как единственный управляющий параметр для очередей Advanced Queue. Его переключают из 0 в положительное значение, но, в целом, его лучше не трогать.
Однако, в ряде случаев количество джобов AQ начинает безостановочно расти. Как правило, эти джобы выполняют DBMS_AQADM_SYS.REGISTER_DRIVER. И штатными средствами их невозможно остановить, только общим количеством job_queue_processes, лимитирование которыми приводит к тому, что обычные джобы блокируются джобами AQ. Как ограничить количество?
В Oracle 11 ввели скрытые параметры:
_srvntfn_job_deq_timeout (60) - как долго существовать AQ-джобу, если очередь пуста. Тут должен быть баланс, чтобы не пересоздавать лишний раз джоб, но я бы попробовал значение в 5 секунд, т.е. _srvntfn_job_deq_timeout=5)
_srvntfn_q_msgcount_inc (100) - какое количество новых сообщений в очереди должно создавать новый джоб. На современных процессорах очередь можно забить достаточно быстро, как и разобрать ее можно очень быстро. Я бы предложил _srvntfn_q_msgcount_inc=1000
_srvntfn_q_msgcount (50) - при каком количестве оставшихся сообщений можно начать сокращать количество джобов. Зеркальный предыдущему параметр. Я бы поставил 300, в любом случае меньший предыдущего параметр.
_srvntfn_jobsubmit_interval (3) - время между созданием джобов. Я бы оставил этот параметр в значении по умолчанию (3 секунды).
_srvntfn_max_concurrent_jobs (20) - максимальное количество одновременно работающих джобов. Необходимо подобрать такое количество, чтобы при общем количестве job_queue_processes не больше, чем количество ядер процессоров на хосте с базой, AQ-джобы не мешали отрабатывать обычным джобам. Начать можно с чего-то небольшого, например, 5
Кстати, несмотря на заявленные значения по умолчанию, я свидетель, что без настройки одновременно работало 60 AQ-джобов, поедая все доступные job_queue_processes.