Некоторое время назад у меня была проблема с производительностью базы данных для вставки / обновления нескольких миллионов записей с использованием jdbc
. Для повышения производительности я изменил код на batch
. Тогда я решил контролировать код, используя jprofiler
, чтобы узнать, насколько сильно увеличивается производительность ... но в то же время, мониторинг обнаружил странную вещь!
Как вы можете видеть на скриншоте выше, генерация нового идентификатора из последовательности очень медленная. Снимок экрана настолько нагляден, что я должен сказать, что вторая строка - это запрос inner join
к таблице с ~ 8 миллионами записей с самим собой и некоторыми вычислениями (сравните его время со временем третьего запроса!).
Я спросил эту проблему у нашего dba, и он сказал что-то о рекомендации оракула для последовательностей кэширования, но когда я проверил последовательность, я увидел, что она уже кэширована.
CREATE SEQUENCE "XXXXXXXXXXXX_ID_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;
Есть мысли?
p.s. Я думаю, что Hibenate
использует последовательности для вставки записей аналогичным образом, и на самом деле я ищу лучшие практики для использования последовательностей для повышения производительности нашего проекта, использующего спящий режим. Вышеуказанная задача jdbc завершена.