sql >> Databasteknik >  >> RDS >> Oracle

Hur hanterar man stora transaktioner under Oracle?

Oracle skapar markör för varje resultatuppsättning och släpper den när resultatuppsättningen stängs (jdbc ResultSet.close() eller liknande). Standardinställningen på 50 öppna markörer per session räcker för alla väldesignade applikationer (när jag väl mätte det och i produktionsläge ökade det aldrig över 20).

Du bör kontrollera hur du får Hibernate att stänga resultatuppsättningar efter hämtning. I allmänhet kan jag inte föreställa mig vad sessionen ska göra om den verkligen kräver 1000 öppna markörer. Jag har aldrig sett max_open_cursors mer än 1000 set, så jag antar att det räcker för dåligt utformade applikationer också (men... det finns ingen gräns för perfektion i nyktert faktum, och jag använder aldrig Hibernate).

Varje markör betyder ett visst minne, så att öka max_open_cursors är inte en lösning för nollpris.



  1. Hur formaterar jag tal så att de bara har två decimaler?

  2. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... förväntar sig att parameter 1 är resurs

  3. Insamlingsmetoder:FÖRSTA &SISTA funktioner i Oracle Database

  4. Visual Studio:ContextSwitchDeadlock