Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co naprawdę robi metoda Statement.setFetchSize(nSize) w sterowniku SQL Server JDBC?

W JDBC setFetchSize(int) Metoda jest bardzo ważna dla wydajności i zarządzania pamięcią w JVM, ponieważ kontroluje liczbę wywołań sieciowych z JVM do bazy danych i odpowiednio ilość pamięci RAM używanej do przetwarzania zestawu wyników.

Z natury rzeczy, jeśli wywoływana jest funkcja setFetchSize(10), a sterownik ją ignoruje, są prawdopodobnie tylko dwie opcje:

  1. Wypróbuj inny sterownik JDBC, który będzie honorował wskazówkę dotyczącą rozmiaru pobierania.
  2. Spójrz na właściwości specyficzne dla sterownika w połączeniu (adres URL i/lub mapa właściwości podczas tworzenia instancji połączenia).

ZESTAW WYNIKÓW to liczba wierszy zorganizowanych w bazie danych w odpowiedzi na zapytanie. ZESTAW WIERSZY to fragment wierszy, które są pobierane z ZESTAWU WYNIKÓW na wywołanie z maszyny JVM do bazy danych. wywołania i wynikowa pamięć RAM wymagana do przetwarzania zależą od ustawienia rozmiaru pobierania.

Więc jeśli RESULT-SET ma 100 wierszy, a rozmiar pobierania wynosi 10, będzie 10 wywołań sieciowych w celu pobrania wszystkich danych, używając w dowolnym momencie pamięci RAM około 10*{row-content-size}.

Domyślny rozmiar pobierania to 10, co jest dość małe. W opublikowanym przypadku wydaje się, że sterownik ignoruje ustawienie rozmiaru pobierania, pobierając wszystkie dane w jednym wywołaniu (wymagana duża pamięć RAM, optymalna minimalna liczba połączeń sieciowych).

Co dzieje się pod ResultSet.next() jest to, że w rzeczywistości nie pobiera jednego wiersza na raz z RESULT-SET. Pobiera to z (lokalnego) ROW-SET i pobiera następny ROW-SET (niewidocznie) z serwera, gdy wyczerpie się na lokalnym kliencie.

Wszystko to zależy od sterownika, ponieważ ustawienie jest tylko „podpowiedzią”, ale w praktyce odkryłem, że tak to działa dla wielu sterowników i baz danych (zweryfikowane w wielu wersjach Oracle, DB2 i 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. Jak ustawić limit czasu skryptu SQL Server z poziomu skryptu?

  2. SQL Server:kolumny do wierszy

  3. Jak przekazać zmienną null do procedury składowanej SQL z kodu C#.net?

  4. Wprowadzenie do funkcji zdefiniowanych przez użytkownika w SQL Server

  5. Sformatuj numer telefonu w programie SQL Server (T-SQL)