Работа с инструкциями и результирующими наборами

Скачать драйвер JDBC

При работе с драйвером Microsoft JDBC Driver для SQL Server и его объектами Statement и ResultSet существует ряд способов повысить производительность и надежность ваших приложений.

Использование подходящего объекта инструкции

При использовании объектов Statement драйвера JDBC, например SQLServerStatement, SQLServerPreparedStatement или SQLServerCallableStatement, обязательно используйте объект, подходящий для вашей задачи.

  • Если параметры OUT отсутствуют, то использовать объект SQLServerCallableStatement не нужно. Вместо него используйте объект SQLServerStatement или SQLServerPreparedStatement.
  • Если не планируется исполнять инструкции несколько раз или параметры IN либо OUT отсутствуют, то использовать объект SQLServerCallableStatement или SQLServerPreparedStatement не нужно. Вместо них используйте объект SQLServerStatement.

Использование подходящего параллелизма для объектов ResultSet

Обновляемый параллелизм при создании инструкций, выдающих результирующие наборы, требуется, только если планируется непременно обновлять результаты. Маленькие результирующие наборы быстрее всего считывает стандартная однопроходная неизменяемая модель курсора.

Ограничение размера результирующих наборов

Попробуйте использовать метод setMaxRows (либо SQL-синтаксис SET ROWCOUNT или SELECT TOP N), чтобы ограничить число строк, возвращаемых из потенциально больших результирующих наборов. Если приходится работать с большими результирующими наборами, то, возможно, следует использовать адаптивную буферизацию ответов. Для этого нужно установить свойству строки соединения responseBuffering значение «adaptive». Это значение используется по умолчанию. Такая методика позволяет приложению обрабатывать большие результирующие наборы, не прибегая к курсорам на стороне сервера, и свести к минимуму занимаемую приложением память. Дополнительные сведения об использовании адаптивной буферизации см. в этой статье.

Использование выборки подходящего размера

Для серверных курсоров только для чтения целесообразность определяется сравнением затрат на обращение к серверу и затрат памяти драйвером. Для обновляемых серверных курсоров размер выборки также влияет на чувствительность результирующего набора к изменениям и параллелизму на сервере. Вы не увидите изменений в строках в текущем буфере выборки, пока не воспользуетесь в явном виде методом refreshRow или пока из буфера не выйдет курсор. У больших буферов выборки будет лучшая производительность (меньше обращений к серверу), но у них меньше чувствительность к изменениям и уменьшению параллелизма на сервере при использовании CONCUR_SS_SCROLL_LOCKS (1009). Для максимальной чувствительности к изменениям размер выборки должен равняться 1. Однако при этом будет совершаться одно обращение к серверу на каждую выбранную строку.

Использование потоков для больших параметров IN

Используйте потоки объектов BLOB и CLOB, постепенно материализуемые для управления обновляющимися большими значениями столбцов или отправления больших параметров IN. Драйвер JDBC дробит эти типы и отправляет на сервер за несколько обращений, тем самым позволяя задавать и обновлять значения большие, чем помещаются в памяти.

См. также раздел

Повышение производительности и надежности с помощью JDBC Driver