Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вставка данных
|
|||
|---|---|---|---|
|
#18+
Требуется через Hibernate сохранить ~2000 объектов. Прокопавшись с маппингом весь день, получилось добиться того, чтобы он ничего лишнего не грузил из базы, а выполнял только те insert'ы, которые требуется. В итоге на 2000 объектов получается 2000+2000+100+20 = 4120 inser'ов и несколько десятков update'ов. Казалось бы, что можно радоваться... да вот не совсем... Все это просиходит в рамках одной транзакции, и transaction.commit() выполняется ~30 секунд, мне кажется, что это слишком много. Судя по логам, ничего лишнего не вылезает, идут инсерты один за другим. База db2 express. Локальная. Размер объекта ~1кб. Я не специалист по DB2, но мне кажется что затраченное время через чур многовато для таких объемов. Как эксперты по DB2, скажите мне, что у меня кривое руки, хибернейт, db2 или все вместе. Какие есть варианты по тюнингу DB2 на insert'ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 02:58 |
|
||
|
Вставка данных
|
|||
|---|---|---|---|
|
#18+
Такое большое время коммита очень странно. В DB2 коммиты обычно проходят быстро. Попробуйте увеличить размер логового буфера: Код: plaintext Если не поможет, надо смотреть, что именно делает ваше приложение и что с производительностью логирования. 1. В db2ce на сервере создайте event monitor для пользователя (здесь - YOUR_AUTH_ID) из-под которого работает приложение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 2. Запустите приложение. Дождитесь, пока отработает. 3. В окне из п.1: Код: plaintext 1. Запросы вашего приложения с разнообразной статистикой попадут в таблицу TEST_STMT. Посмотрите на время выполнения commit там, да и вообще на то, что туда попало - может ваш хибернейт при команде commit что-то дополнительное писать начинает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 11:35 |
|
||
|
Вставка данных
|
|||
|---|---|---|---|
|
#18+
Написал пару тестов на "голом" JDBC. Время хоть и сократилось немного, но все равно слишком велико. В качестве ключа в одной из таблиц используется VARCHAR(500), думаю это была большая глупость и причина тормозов как раз в этом. Вот кстати вывод статистики для вставки через хибернейт: (тут самое интересное по моему мнению, там есть еше много всякой информации, но я либо не понимаю что она означает, либо не считаю представляющей интерес) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Select SQL statements executed = 2120, хотя по логам хибернейта их там гораздо меньше, не более десятка, я правильно понимаю что сюда занесены те селекты, которые были автоматически сделаны при вставке новых строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 15:05 |
|
||
|
Вставка данных
|
|||
|---|---|---|---|
|
#18+
+ я правильно понимаю, что все индексы в базе лучше сделать автогенерируемыми, а проверку наличия только единственной копии данных переместить в само приложение? Я знал что это лишняя нагрузка на базу, но то что это настолько убивает производительность оказалось очень неприятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 15:13 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=93&tid=1603771]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 341ms |

| 0 / 0 |
