Udostępnij przez


Buforowanie metadanych zapytań przygotowanych dla sterownika JDBC

pobierz sterownik JDBC

Ten artykuł zawiera informacje na temat dwóch zmian, które zwiększają wydajność sterownika.

Dzielenie na partie nieprzygotowanych instrukcji

Począwszy od wersji 6.2, zaimplementowano poprawę wydajności, która minimalizuje rundy serwera do programu SQL Server. Wcześniej dla każdego zapytania prepareStatement wysyłano również wywołanie unprepare. Teraz sterownik grupował nieprzygotowane zapytania do progu ServerPreparedStatementDiscardThreshold, którego wartość domyślna wynosi 10.

Uwaga / Notatka

Użytkownicy mogą zmienić wartość domyślną przy użyciu następującej metody: setServerPreparedStatementDiscardThreshold(int value)

Przed wersją 6.2 sterownik zawsze wywoływał sp_prepexec. W wersji 6.2 lub nowszej, przy pierwszym wykonaniu przygotowanej instrukcji, sterownik wywołuje sp_executesql, a dla pozostałych wykonuje sp_prepexec i przypisuje do niego uchwyt. Aby uzyskać więcej informacji, zobacz Buforowanie metadanych PreparedStatement.

Począwszy od wersji 11.2, po początkowym sp_executesql wywołaniu, sterownik może wykonać dodatkowe wywołania sp_prepare lub sp_prepexec w zależności od wartości określonej we właściwości łańcucha połączenia prepareMethod. Aby uzyskać więcej informacji, zobacz Ustawianie właściwości połączenia.

Uwaga / Notatka

Użytkownicy mogą zmienić domyślne zachowanie na wcześniejsze zawsze wywoływanie sp_prepexec poprzez ustawienie enablePrepareOnFirstPreparedStatementCall na true za pomocą następującej metody: setEnablePrepareOnFirstPreparedStatementCall(boolean wartość)

Lista nowych interfejsów API wprowadzonych z tą zmianą w celu dzielenia na partie nieprzygotowanych instrukcji

SQLServerConnection anulowanie przygotowania zadania zbiorczego

Nowa metoda Description
int getDiscardedServerPreparedStatementCount() Zwraca liczbę aktualnie zaległych akcji nieprzygotowanych.
void closeUnreferencedPreparedStatementHandles() Wymusza nieprzygotowywanie żądań dla wszystkich zaległych odrzuconych przygotowanych instrukcji do wykonania.
boolean getEnablePrepareOnFirstPreparedStatementCall() Zwraca sposób działania dla określonego wystąpienia połączenia. Jeśli fałsz, pierwsze wywołanie sp_executesql wykonuje się, nie przygotowując instrukcji. Jeśli wystąpi drugie wykonanie, wywołuje sp_prepare lub sp_prepexec, faktycznie konfigurując uchwyt przygotowanego zapytania. Późniejsze wykonania wywołają sp_execute. To zachowanie zmniejsza potrzebę sp_unprepare zamknięcia przygotowanej instrukcji, jeśli instrukcja jest wykonywana tylko raz. Wartość domyślną tej opcji można zmienić przez wywołanie polecenia setDefaultEnablePrepareOnFirstPreparedStatementCall().
void setEnablePrepareOnFirstPreparedStatementCall(wartość typu boolean) Określa zachowanie określonego wystąpienia połączenia. Jeśli wartość jest false, pierwsze wywołanie wywołuje sp_executesql i nie przygotowuje instrukcji. Jeśli wystąpi drugie wykonanie, wywołuje sp_prepare lub sp_prepexec, faktycznie konfigurując uchwyt przygotowanego zapytania. Późniejsze wykonania wywołają sp_execute. To zachowanie zmniejsza potrzebę sp_unprepare zamknięcia przygotowanej instrukcji, jeśli instrukcja jest wykonywana tylko raz.
int getServerPreparedStatementDiscardThreshold() Zwraca sposób działania dla określonego wystąpienia połączenia. To ustawienie określa, ile zaległych operacji odrzucenia (sp_unprepare) może istnieć na każde połączenie, zanim zostanie wykonana akcja w celu wyczyszczenia zaległych dojść na serwerze. Jeśli ustawienie ma <wartość = 1, akcje nieprzygotowane są wykonywane natychmiast po zamknięciu przygotowanej instrukcji. Po ustawieniu wartości > 1 te wywołania są grupowane, aby uniknąć nadmiernego narzutu związanego z częstym wywoływaniem sp_unprepare. Wartość domyślną tej opcji można zmienić przez wywołanie metody getDefaultServerPreparedStatementDiscardThreshold().
void setServerPreparedStatementDiscardThreshold(wartość int) Określa zachowanie określonego wystąpienia połączenia. To ustawienie określa, ile zaległych operacji odrzucenia (sp_unprepare) może istnieć na każde połączenie, zanim zostanie wykonana akcja w celu wyczyszczenia zaległych dojść na serwerze. Jeśli ustawienie ma <wartość = 1, akcje nieprzygotowane są wykonywane natychmiast po zamknięciu przygotowanej instrukcji. Po ustawieniu wartości > 1 te wywołania są grupowane, aby uniknąć zbyt częstego obciążenia związanego z wywołaniami sp_unprepare.

SQLServerDataSource wyłączanie przetwarzania wsadowego

Nowa metoda Description
void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) Jeśli ta konfiguracja jest fałszywa, pierwsza próba wykonania przygotowanej instrukcji wywołuje sp_executesql i nie powoduje przygotowania instrukcji. Jeśli wystąpi drugie wykonanie, wywołuje sp_prepare lub sp_prepexec i konfiguruje uchwyt przygotowanej instrukcji. Późniejsze wykonania wywołają sp_execute. To zachowanie eliminuje potrzebę sp_unprepare zamknięcia przygotowanej instrukcji, jeśli instrukcja jest wykonywana tylko raz.
boolean getEnablePrepareOnFirstPreparedStatementCall() Jeśli ta konfiguracja zwróci wartość false, pierwsze wykonanie przygotowanej instrukcji wywoła sp_executesql i nie przygotuje instrukcji. Jeśli wystąpi drugie wykonanie, wywołuje sp_prepare lub sp_prepexec, faktycznie konfigurując uchwyt przygotowanego zapytania. Późniejsze wykonania wywołają sp_execute. To zachowanie eliminuje potrzebę zamknięcia sp_unprepare przygotowanego zapytania, jeśli zapytanie jest wykonywane tylko raz.
void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) To ustawienie określa, ile zaległych operacji odrzucenia (sp_unprepare) może istnieć na każde połączenie, zanim zostanie wykonana akcja w celu wyczyszczenia zaległych dojść na serwerze. Jeśli ustawienie ma <wartość = 1, akcje nieprzygotowane są wykonywane natychmiast po zamknięciu przygotowanej instrukcji. Po ustawieniu wartości > 1 te wywołania są grupowane razem, aby uniknąć obciążenia wywoływania sp_unprepare zbyt często.
int getServerPreparedStatementDiscardThreshold() To ustawienie określa, ile zaległych operacji odrzucenia (sp_unprepare) może istnieć na każde połączenie, zanim zostanie wykonana akcja w celu wyczyszczenia zaległych dojść na serwerze. Jeśli ustawienie ma <wartość = 1, akcje nieprzygotowane są wykonywane natychmiast po zamknięciu przygotowanej instrukcji. Po ustawieniu wartości > 1, te wywołania są łączone w partie, aby uniknąć kosztu narzutowego spowodowanego zbyt częstym wywoływaniem sp_unprepare.

Buforowanie metadanych przygotowanej instrukcji SQL-owej

Począwszy od wersji 6.4, sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje buforowanie przygotowanych instrukcji. Przed wersją 6.4, jeśli zapytanie jest już przygotowane i przechowywane w pamięci podręcznej, wywołanie tego samego zapytania ponownie nie wymaga ponownego przygotowania. Sterownik wyszukuje zapytanie w pamięci podręcznej, aby znaleźć dojście i wykona je za pomocą polecenia sp_execute. Buforowanie metadanych dla przygotowywanej instrukcji jest domyślnie wyłączone. Aby ją włączyć, wywołaj następującą metodę w obiekcie połączenia:

setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0) setDisableStatementPooling(boolean value) //false allows the caching to take place

Na przykład: connection.setStatementPoolingCacheSize(10)connection.setDisableStatementPooling(false)

Lista nowych interfejsów API wprowadzonych z tą zmianą na potrzeby buforowania metadanych przygotowanej instrukcji

Buforowanie metadanych SQLServerConnection

Nowa metoda Description
void setDisableStatementPooling(wartość boolowska) Ustawia buforowanie instrukcji na wartość true lub false.
boolean getDisableStatementPooling() Zwraca wartość true, jeśli buforowanie instrukcji jest wyłączone.
void setStatementPoolingCacheSize(int wartość) Określa rozmiar pamięci podręcznej przygotowanej instrukcji dla tego połączenia. Wartość < 1 oznacza brak pamięci podręcznej.
int getStatementPoolingCacheSize() Zwraca rozmiar pamięci podręcznej przygotowanego zapytania dla tego połączenia. Wartość < 1 oznacza brak pamięci podręcznej.
int getStatementHandleCacheEntryCount() Zwraca bieżącą liczbę dojść przygotowanych instrukcji w puli.
wartość logiczna isPreparedStatementCachingEnabled() Określa, czy buforowanie instrukcji jest włączone, czy nie dla tego połączenia.

Buforowanie metadanych SQLServerDataSource

Nowa metoda Description
void setDisableStatementPooling(boolean disableStatementPooling) Ustawia buforowanie instrukcji na wartość true lub false
Boolean getDisableStatementPooling() Zwraca wartość true, jeśli buforowanie instrukcji jest wyłączone.
void setStatementPoolingCacheSize(int statementPoolingCacheSize) Określa rozmiar pamięci podręcznej przygotowanej instrukcji dla tego połączenia. Wartość < 1 oznacza brak pamięci podręcznej.
int getStatementPoolingCacheSize() Zwraca rozmiar pamięci podręcznej przygotowanego zapytania dla tego połączenia. Wartość < 1 oznacza brak pamięci podręcznej.

Zobacz także

Zwiększanie wydajności i niezawodności dzięki sterownikowi JDBCWydajność parametrów w przygotowanej instrukcji