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

Какво наистина прави методът Statement.setFetchSize(nSize) в JDBC драйвер на SQL Server?

В JDBC, setFetchSize(int) методът е много важен за производителността и управлението на паметта в JVM, тъй като контролира броя на мрежовите повиквания от JVM към базата данни и съответно количеството RAM, използвано за обработка на ResultSet.

По същество, ако setFetchSize(10) се извиква и драйверът го игнорира, вероятно има само две опции:

  1. Опитайте с друг JDBC драйвер, който ще спазва съвета за размер на извличане.
  2. Разгледайте специфичните за драйвера свойства на връзката (URL и/или карта на свойствата, когато създавате екземпляра на връзката).

RESULT-SET е броят на редовете, маршалирани в DB в отговор на заявката. ROW-SET е частта от редове, които се извличат от RESULT-SET на извикване от JVM към DB. Броят на тези повикванията и получената RAM памет, необходима за обработка, зависят от настройката за размера на извличане.

Така че, ако RESULT-SET има 100 реда и размерът на извличане е 10, ще има 10 мрежови обаждания за извличане на всички данни, като се използват приблизително 10*{row-content-size} RAM във всеки даден момент.

Размерът на извличане по подразбиране е 10, което е доста малко. В публикувания случай изглежда, че драйверът игнорира настройката за извличане, извличайки всички данни с едно повикване (изисква се голямо RAM, оптимално минимално мрежови обаждания).

Какво се случва под ResultSet.next() е, че всъщност не извлича ред по ред от RESULT-SET. Той извлича това от (локалния) ROW-SET и извлича следващия ROW-SET (невидимо) от сървъра, когато се изчерпва на локалния клиент.

Всичко това зависи от драйвера, тъй като настройката е само „подсказка“, но на практика открих, че така работи за много драйвери и бази данни (проверено в много версии на Oracle, DB2 и MySQL).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво се случва с идентификатора на първичния ключ, когато надхвърли лимита?

  2. Как да направите ЛЯВО ПОЛУ ПРИСЪЕДИНЕНИЕ в SQL Server

  3. Защо да използвате Select Top 100 процента?

  4. Какво е „идентификатор от няколко части“ и защо не може да бъде обвързан?

  5. Изпълняване на SQL Server 2014 на виртуална машина Azure