JDBC (mysql) сохраняет запросы в памяти кучи - PullRequest
1 голос
/ 12 июля 2010

Я пытаюсь запустить Hibernate Search в базе данных на таблице с 12 500 000 записей.

При запуске Hibernate Search запрашивает базу данных для получения информации о схеме.

Проблема в том, что яget OutOfMemory: исключение размера кучи.

Я прочитал и обнаружил, что коннектор JDBC MySQL помещает запросы в память кучи JAVA, и это ошибка.

Есть ли обходной путь для этой ошибки?

Я использую соединитель 5.1.

Пожалуйста, смотрите мой пост на форуме Hibernate, где пишут, что в MySQL Поиск по форуму есть ошибка

Вопрос в том, как я могу работать вокруг него?

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Я нашел решение.

В MySQL мне пришлось добавить в строку подключения:

&useServerPrepStmts=true&useCursorFetch=true

Эта опция по умолчанию разрешает потоковую передачу.

1 голос
/ 12 июля 2010

Это не обязательно ошибка, если у вас недостаточно памяти, возможно, вам просто не хватило памяти, выделенной для Java. Пространство кучи - это место, где хранятся данные в объектах, а соединение JDBC - это объект. Если код правильный и вам просто нужно больше места в куче, увеличьте размер кучи.

java -Xms<initial heap size> -Xmx<maximum heap size>

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

0 голосов
/ 12 июля 2010

Метаданные базы данных не требуют много памяти.Запустите приложение с помощью профилировщика, и вы сразу увидите, как используется память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...