Подключение к MSSQL занимает слишком много памяти - PullRequest
0 голосов
/ 07 июня 2019

Я использую драйвер mssql-jdbc в версии 6.4.0-jre8.Я выполняю простой запрос SELECT *, который может вернуть миллионы строк.Чтобы избежать ошибки OOM, я определил responseBuffering=adaptive и fetchSize=10000.Я также гарантировал, что ResultSet - это type_fetch_only и concur_read_only.Несмотря на это, я все еще получаю ошибку OOM.Размер кучи немедленно возрастает до предела XMX.

Ниже вы можете найти анализ дампа памяти.Интересно, почему TDSPackets не освобождаются достаточно рано?

enter image description here

Буду признателен за любые предложения, как избежать ошибки OOM здесь.Спасибо!

1 Ответ

1 голос
/ 24 июня 2019

Проблема заключалась в том, что я выполнял несколько запросов на одном и том же соединении одновременно.

Согласно официальной документации: https://docs.microsoft.com/en-us/sql/connect/jdbc/using-adaptive-buffering?view=sql-server-2017#guidelines-for-using-adaptive-buffering

Избегайте одновременного выполнения более одного оператора в одном соединении. Выполнение другого оператора перед обработкой результатов предыдущего оператора может привести к буферизации необработанных результатов в памяти приложения.

...