La tua applicazione multi-thread apre troppe connessioni/sessioni. Quindi, l'ascoltatore interrompe e blocca le nuove connessioni per un po'.
Controlla prima l'utilizzo delle risorse del database:
SELECT * FROM v$resource_limit WHERE resource_name IN ('processes','sessions');
Verifica se MAX_UTILIZATION per i tuoi processi o sessioni si sta avvicinando troppo al LIMIT_VALUE. Se sì, dovresti:
- Utilizza il pool di connessioni DB per condividere
Connection
oggetti tra i thread. Oppure, - Aumenta il numero di processi/sessioni che Oracle può servire contemporaneamente.
In realtà, Connection Pooling (n. 1) dovrebbe essere sempre eseguito. Un'applicazione non può aumentare la scalabilità altrimenti. Controlla Apache Commons DBCP per dettagli. Per #2, apri una nuova sessione SQL*Plus come SYSTEM ed esegui:
ALTER system SET processes=<n-as-per-number-of-threads> scope=spfile;
per aumentare la concorrenza di back-end. Quindi RIAVVIA il database. IMPORTANTE!