Oracle
 sql >> Database >  >> RDS >> Oracle

Come gestire grandi transazioni in Oracle?

Oracle crea il cursore per ogni set di risultati e lo rilascia alla chiusura del set di risultati (jdbc ResultSet.close() o simile). L'impostazione predefinita di 50 cursori aperti per sessione è sufficiente per qualsiasi applicazione ben progettata (una volta che l'ho misurata e in modalità di produzione non è mai aumentata di oltre 20).

Dovresti controllare come fare in modo che Hibernate chiuda i set di risultati dopo il recupero. In generale, non riesco a immaginare cosa dovrebbe fare la sessione se richiede davvero 1000 cursori aperti. Non ho mai visto max_open_cursors più di 1000 set, quindi, immagino, sia sufficiente anche per applicazioni mal progettate (ma... non c'è limite alla perfezione in realtà, e non uso mai Hibernate).

Ogni cursore significa un po' di memoria, quindi aumentare max_open_cursors non è una soluzione a prezzo zero.