каков размер по умолчанию, в спящем режиме jdbc.fetch_size?

Мы знаем по умолчанию, большинство размеров выборки jdbc драйверов равняется 10.

кто-либо знает то, что размер выборки по умолчанию в в спящем режиме, а именно, в спящем режиме jdbc.fetch_size?

12
задан Gray 29 October 2015 в 20:03
поделиться

3 ответа

По умолчанию ноль , то есть без настройки. Базовая реализация интерфейса Query , AbstractQueryImpl внутренне использует RowSelection для отслеживания первой строки, размера выборки и тайм-аута. Если эти значения равны null , тогда значения не устанавливаются в базовом соединении JDBC.

2
ответ дан 2 December 2019 в 22:03
поделиться

В основном, все параметры конфигурации используются для создания экземпляра o.h.c.Settings. Это делается методом o.h.c.SettingsFactory#buildSettings(), который содержит следующие строки:

Integer statementFetchSize = PropertiesHelper.getInteger(Environment.STATEMENT_FETCH_SIZE, properties);
if (statementFetchSize!=null) log.info("JDBC result set fetch size: " + statementFetchSize);
settings.setJdbcFetchSize(statementFetchSize);

Итак, допускается null значение, оно не будет переведено и будет "распространяться" как таковое.

Эта настройка затем используется в o.h.j.AbstractBatcher.java#setStatementFetchSize:

private void setStatementFetchSize(PreparedStatement statement) throws SQLException {
    Integer statementFetchSize = factory.getSettings().getJdbcFetchSize();
    if ( statementFetchSize!=null ) {
        statement.setFetchSize( statementFetchSize.intValue() );
    }
}

Этот приватный метод вызывается при подготовке PreparedStatement или CallableStatement. См. prepareQueryStatement и prepareCallableQueryStatement в AbstractBatcher.

Итак, значение по умолчанию null приводит к тому, что Hibernate не вызывает Statement#setFetchSize().

На самом деле это кратко описано в справочной документации:

3.4. Необязательные свойства конфигурации

...

hibernate.jdbc.fetch_size: Ненулевое значение определяет размер выборки JDBC (вызовы Statement.setFetchSize())

А вот что говорит javadoc о Statement#setFetchSize():

Дает драйверу JDBC подсказку о том. количество строк, которые должны быть извлечены из базы данных, когда требуется больше строк необходимо для объектов ResultSet, генерируемых этим Statement. Если значение равно нулю, то подсказка игнорируется. Значение по умолчанию равно нулю.

Другими словами, при использовании null fetch_size драйвер JDBC будет использовать значение по умолчанию, которое равно нулю.

7
ответ дан 2 December 2019 в 22:03
поделиться

На языке JDBC размер выборки - это количество строк, физически извлекаемых из базы данных за один раз драйвером JDBC, когда вы прокручиваете ResultSet запроса с помощью next(). В hibernate.jdbc.fetch_size ненулевое значение определяет размер выборки JDBC, который в свою очередь вызывает java.sql.Statement.setFetchSize().

Размер выборки JDBC - это подсказка по оптимизации для драйвера базы данных; она может не привести к улучшению производительности, если используемый вами драйвер не реализует эту функциональность. Если же это так, то это может улучшить взаимодействие между JDBC-клиентом и вашей базой данных.

Дополнительную информацию см. на http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#setFetchSize%28int%29.

2
ответ дан 2 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: