Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle JDBC разпределяне на памет при извличане на набор от резултати

Драйвер на Oracle Database JDBC, версии преди 12:

Драйверът разпределя максималния размер за всяка колона, умножен по броя на редовете в fetchSize преди да изпълните заявката.

Например за VARCHAR(4000) колона ще задели 8k байта, умножени по fetchSize .


версии 12 (и по-нови):

Той разпределя приблизително 15 байта на колона на ред в fetchSize преди да изпълните заявката. След изпълнение драйверът във версия 12 разпределя само толкова, колкото е необходимо за съхраняване на действителните данни за реда.

В резултат на това драйверите на версия 12 обикновено използват значително по-малко памет от драйверите на по-ранните версии.


Вашият пример :

Във вашия пример VARCHAR(20) може да бъде голям до 40 байта, NUMBER може да бъде голям до 22 байта и VARCHAR(100) големи до 100 байта. С fetchSize настроен на 100, по-старите драйвери биха разпределили (40 + 22 + 100) * 100 = 16k . Драйверът версия 12 ще разпредели 3 * 15 * 100 = 4.5k . Има допълнителни разходи и в двата драйвера, които пренебрегвам.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на функциите PostgreSQL array() / array_to_string() в Oracle 9i

  2. Използване на OracleParameter с C# TimeSpan - Литералът не съвпада

  3. Най-добрият начин за сравняване на VARCHAR2 с CHAR

  4. ORA-06530:Препратка към неинициализиран композит

  5. Как да отстранявате грешки в съхранени процедури на Java в Oracle