JDB C ResultSet с SQL сервером - PullRequest
       37

JDB C ResultSet с SQL сервером

0 голосов
/ 11 апреля 2020

При запросе с использованием JDB C createStatement и получении ResultSet из миллионов строк (с сервера SQL), какие SQL запросы действительно выполняются, где хранятся строки и сколько строк? Использует ли он SQL Серверный курсор? Я знаю, что в клиентской памяти хранится только ограниченное количество строк (где код Java), поэтому, где хранятся остальные строки, или, возможно, они еще не запрашиваются с сервера SQL) ? Когда я посмотрел на SQL Профилировщик сервера, он просто показывает обычный запрос (он не добавил курсор или TOP X чего-то еще)

1 Ответ

1 голос
/ 11 апреля 2020

Взято с серверной документации SQL об адаптивной буферизации :

Обычно, когда драйвер Microsoft JDB C для SQL Server выполняет запрос, Драйвер извлекает все результаты с сервера в память приложения. Хотя этот подход минимизирует потребление ресурсов на сервере SQL, он может выдавать ошибку OutOfMemoryError в приложении JDB C для запросов, которые дают очень большие результаты.

Есть способ обойти это, что SQL Сервер вызывает Adaptive Buffering и, кажется, он включен по умолчанию для JDBC driver version 2+, и вы можете прочитать об этом в документации. Вот суть:

Чтобы приложения могли обрабатывать очень большие результаты, драйвер Microsoft JDB C для SQL Server обеспечивает адаптивную буферизацию. Благодаря адаптивной буферизации драйвер извлекает результаты выполнения операторов с сервера SQL по мере необходимости, а не все сразу.

...