Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вставка данных / 5 сообщений из 5, страница 1 из 1
29.07.2008, 02:58
    #35456670
reality
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных
Требуется через Hibernate сохранить ~2000 объектов. Прокопавшись с маппингом весь день, получилось добиться того, чтобы он ничего лишнего не грузил из базы, а выполнял только те insert'ы, которые требуется. В итоге на 2000 объектов получается 2000+2000+100+20 = 4120 inser'ов и несколько десятков update'ов. Казалось бы, что можно радоваться... да вот не совсем... Все это просиходит в рамках одной транзакции, и transaction.commit() выполняется ~30 секунд, мне кажется, что это слишком много. Судя по логам, ничего лишнего не вылезает, идут инсерты один за другим.

База db2 express. Локальная. Размер объекта ~1кб. Я не специалист по DB2, но мне кажется что затраченное время через чур многовато для таких объемов. Как эксперты по DB2, скажите мне, что у меня кривое руки, хибернейт, db2 или все вместе.

Какие есть варианты по тюнингу DB2 на insert'ы?
...
Рейтинг: 0 / 0
29.07.2008, 11:35
    #35457274
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных
Такое большое время коммита очень странно.
В DB2 коммиты обычно проходят быстро.

Попробуйте увеличить размер логового буфера:
Код: plaintext
update db cfg for your_db_name using LOGBUFSZ  1000 
и отключите всех пользователей от базы, чтоб изменения вступили в силу.

Если не поможет, надо смотреть, что именно делает ваше приложение и что с производительностью логирования.

1.
В db2ce на сервере создайте event monitor для пользователя (здесь - YOUR_AUTH_ID) из-под которого работает приложение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CONNECT TO YOUR_DB_NAME;
CREATE EVENT MONITOR TEST FOR STATEMENTS
WHERE AUTH_ID='YOUR_AUTH_ID'
WRITE TO TABLE
  CONNHEADER (TABLE TEST_CONN, IN USERSPACE1)
, STMT (TABLE TEST_STMT, IN USERSPACE1);
SET EVENT MONITOR TEST STATE  1 ;
update monitor switches using lock on;
reset monitor all;
Окно не закрывайте.
2.
Запустите приложение. Дождитесь, пока отработает.
3.
В окне из п.1:
Код: plaintext
1.
SET EVENT MONITOR TEST STATE  0 ;
GET SNAPSHOT FOR DB ON YOUR_DB_NAME;
Вывод последней команды в студию.
Запросы вашего приложения с разнообразной статистикой попадут в таблицу TEST_STMT.
Посмотрите на время выполнения commit там, да и вообще на то, что туда попало - может ваш хибернейт при команде commit что-то дополнительное писать начинает...
...
Рейтинг: 0 / 0
29.07.2008, 15:05
    #35458089
reality
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных
Написал пару тестов на "голом" JDBC. Время хоть и сократилось немного, но все равно слишком велико. В качестве ключа в одной из таблиц используется VARCHAR(500), думаю это была большая глупость и причина тормозов как раз в этом.

Вот кстати вывод статистики для вставки через хибернейт: (тут самое интересное по моему мнению, там есть еше много всякой информации, но я либо не понимаю что она означает, либо не считаю представляющей интерес)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Commit statements attempted                =  14 
Rollback statements attempted              =  1 
Dynamic statements attempted               =  10599 
Static statements attempted                =  28 
Failed statement operations                =  1 
Select SQL statements executed             =  2120 
Xquery statements executed                 =  0 
Update/Insert/Delete statements executed   =  4104 
DDL statements executed                    =  0 
Inactive stmt history memory usage (bytes) =  0 

Rows deleted                               =  0 
Rows inserted                              =  4002 
Rows updated                               =  101 
Rows selected                              =  2417 
Rows read                                  =  77108 
Binds/precompiles attempted                =  0 

Select SQL statements executed = 2120, хотя по логам хибернейта их там гораздо меньше, не более десятка, я правильно понимаю что сюда занесены те селекты, которые были автоматически сделаны при вставке новых строк?
...
Рейтинг: 0 / 0
29.07.2008, 15:13
    #35458125
reality
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных
+ я правильно понимаю, что все индексы в базе лучше сделать автогенерируемыми, а проверку наличия только единственной копии данных переместить в само приложение? Я знал что это лишняя нагрузка на базу, но то что это настолько убивает производительность оказалось очень неприятно.
...
Рейтинг: 0 / 0
29.07.2008, 15:15
    #35458136
reality
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка данных
в предыдущем сообщении, имеются ввиду не индексы а ключи
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вставка данных / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]