Я пытался использовать Spring 3.0 SimpleJdbcTemplate, и для вставки 1500 записей требуется 5 минут, тогда как мне требуется несколько секунд. для вставки с использованием прямого JDBC. Не уверен, что я делаю неправильно.
Весна JDBC против JDBC
comment
Это не вопрос и не дает нам никакого кода для тщательного изучения. Как вы ожидаете, что мы вам поможем? Пожалуйста, рассмотрите возможность предоставления более подробной информации.
- person Andrew   schedule 09.08.2010
comment
Не говорю, что вставка должна занимать 5 минут, но будет задержка, когда вы используете любую структуру поверх прямого jdbc. Опубликуйте свои запросы/код, чтобы мы могли видеть, что происходит.
- person del.ave   schedule 09.08.2010
Ответы (3)
Если вы создаете пакет, рассмотрите возможность использования пакета Spring — JdbcBatchItemWriter
с правильными настройками размера фрагмента, который загрузит эти 1500 записей менее чем за секунду.
person
rihards
schedule
13.08.2010
Некоторые вещи, которые стоит проверить:
- Накладные расходы могут быть связаны с транзакцией, управляемой Spring на уровне приложения. Посмотрите, какой менеджер транзакций вы используете (ищите bean-компонент с именем
transactionManager
). Если вы используете JTA, вероятно, проблема именно в этом. Поскольку JDBC работает быстро, узким местом, похоже, не является БД. - В зависимости от того, как ваше приложение использует эту транзакцию, оно может хранить все в памяти, прежде чем завершит все 1500 запросов и зафиксирует. Вы видите большую разницу в использовании памяти (у Spring должно быть намного больше)?
- Какой пул соединений с БД вы используете в любом из случаев?
Быстрый способ профилировать ваше приложение:
Получите pid - "jps -l"
Память: jmap -histo PID
(проверьте, нет ли утечки памяти)
Проверьте, что происходит под капотом: jstack PID
(ищите медленные или рекурсивные вызовы методов)
person
Felipe Oliveira
schedule
15.08.2010
Как насчет использования
jdbcTemplate.batchUpdate(new String[]{sql});
person
red
schedule
31.03.2015