Каков максимальный размер партии JDBC?

У меня есть список, и этот список постоянно увеличивается. Я делаю добавление партии в зависимости от размера списка. Я забыл наложить ограничение на do executeBatch в указанном размере.

Программа работает в течение нескольких часов. Я не хочу останавливаться, исправлять и начинать заново.

Мои вопросы, что определяет размер добавляемой партии? Какова максимальная емкость партии для выполнения executeBatch() за один раз? Сколько раз я могу использовать addBatch без do executeBatch()?

Ответ 1

PgJDBC имеет некоторые ограничения в отношении партий:

Преимущество пакетной обработки - это сокращение числа поездок по сети. Таким образом, гораздо меньше, если ваш БД локален для вашего сервера приложений. Там уменьшается доход с увеличением размера партии, потому что общее время, затрачиваемое на ожидание сети, быстро падает, поэтому часто не работает, усиливая попытку сделать партии как можно большими.

Если вы загружаете данные с большой загрузкой, серьезно подумайте об использовании API COPY вместо этого через PgJDBC CopyManager, полученный через интерфейс PgConnection. Он позволяет вам передавать CSV-подобные данные на сервер для быстрой массовой загрузки с очень небольшим количеством посещений клиент/сервер. К сожалению, это замечательно недостаточно документально - оно вообще не отображается в основных документах PgJDBC, только в документах API.

Ответ 2

В зависимости от реализации JDBC может быть максимальное количество маркеров параметров.

Например, драйвер PostgreSQL представляет количество параметров как 2-байтовое целое число, которое на Java не более 32768.

Ответ 3

AFAIK не существует ограничений рядом с проблемой памяти. в отношении вашего вопроса: оператор отправляется в БД только для выполнения партии, поэтому пока вы не выполните пакет, память будет продолжать расти, пока вы не получите JavaHeapSpace или пакет не будет отправлен в БД.