Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Оптимизация Insert / 18 сообщений из 18, страница 1 из 1
10.07.2008, 19:49
    #35424060
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Задача - запихнуть файл данных во временную таблицу для последующей обработки.

После парсинга файла получаем набор INSERT TABLE col1,col2 VALUES (val1,val2),(va1,val2),.....


Что интересно, если вставлять по 50 записей в транзакцию, то запрос исполнятся по 30мс, если по 500 записей то 10сек. Страшная прогрессия.


Задача конечно, вставить файл в таблицу максимально быстро, тк файл надо обрабатывать постоянно и он очень большой. ( под 100.000 записей)


Временная таблица создается вида DECLARE GLOBAL TEMPORARY TABLE session.blabla () on commit preserve rows not logged

Где копать?
...
Рейтинг: 0 / 0
11.07.2008, 08:24
    #35424452
xz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Может проще воспользоваться утилитой импорт?
...
Рейтинг: 0 / 0
11.07.2008, 10:50
    #35424756
mitek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
т.е 50 записей вставляются за 30мс, а 500 записей вставляются уже за 10 сек ? я правильно понял ?

А темп таблицы обязательно юзать ?

И что значит "надо обрабатывать постоянно" ? У вас обработка параллельными сессиям чтоли ?

Простой импорт в реальную таблицу 100000 записей шириной в почти килобайт на моем не самом мощном писюке проходит за ~ 15 сек.
...
Рейтинг: 0 / 0
11.07.2008, 12:08
    #35425124
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
mitekт.е 50 записей вставляются за 30мс, а 500 записей вставляются уже за 10 сек ? я правильно понял ?


Да, если делать 1 транзакцией. Получается самое оптимальное вставлять по 25 записей, что конечно мне кажется неправильным.


mitek
А темп таблицы обязательно юзать ?


Обычные таблицы еще дольше работают, и нет необходимости хранить эти данные, они нужны только для обработки.

mitek
И что значит "надо обрабатывать постоянно" ? У вас обработка параллельными сессиям чтоли ?

Такие файлы поступают постоянно ( с переодичностью раз в час) и их надо на основании данных таблиц в db2 обрабатывать.



100.000 за 15 сек меня бы устроило, но я не могу добиться такой производительности. По 25 записей 20.000 улетают в таблицу за минуту на не самых слабых железках.
...
Рейтинг: 0 / 0
11.07.2008, 12:10
    #35425131
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
CLI умеет работать с массивами параметров, и, стало быть, используя выражение вида
INSERT INTO TABLE(col1,col2) VALUES (?,?)
можно вставлять разом кучу строк.
Утилита import, надо полагать, пользуется этой возможностью.
Утилита load будет ещё быстрее.
...
Рейтинг: 0 / 0
11.07.2008, 12:12
    #35425139
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
xz321Может проще воспользоваться утилитой импорт?

Куда интересней как импорт вставляет данные в таблицу так быстро, чтобы сделать также.

Чтото мне подсказывает, что она делает это тем же SQL ;)
...
Рейтинг: 0 / 0
11.07.2008, 12:18
    #35425162
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Victor MetelitsaCLI умеет работать с массивами параметров, и, стало быть, используя выражение вида
INSERT INTO TABLE(col1,col2) VALUES (?,?)


Скорее так:

INSERT INTO TABLE(col1,col2) VALUES (?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?).....

Я б этом и говорю. Если в массиве 50 строк = 30мс, если 500 = 10 сек. Вот в чем проблема.

Можно еще попробовать

BEGIN ATOMIC
INSERT INTO TABLE(col1,col2) VALUES (?,?)
INSERT INTO TABLE(col1,col2) VALUES (?,?)
INSERT INTO TABLE(col1,col2) VALUES (?,?)
INSERT INTO TABLE(col1,col2) VALUES (?,?)
INSERT INTO TABLE(col1,col2) VALUES (?,?)
END
...
Рейтинг: 0 / 0
11.07.2008, 12:45
    #35425277
mitek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Dmitry Y.
Обычные таблицы еще дольше работают, и нет необходимости хранить эти данные, они нужны только для обработки.

тесты проводились ? за сколько импорт впихивает теже 100 тонн записей в реальную таблицу ?

Dmitry Y.
Такие файлы поступают постоянно ( с переодичностью раз в час) и их надо на основании данных таблиц в db2 обрабатывать.

раз в час это совсем немного. я думал как минимум раз в минуту :)

Dmitry Y.
100.000 за 15 сек меня бы устроило, но я не могу добиться такой производительности. По 25 записей 20.000 улетают в таблицу за минуту на не самых слабых железках.
:) конфиг железок в студию
странно как-то, а инсертите из проги какой или clp-скриптом ?
...
Рейтинг: 0 / 0
11.07.2008, 13:44
    #35425470
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
mitek Dmitry Y.
Обычные таблицы еще дольше работают, и нет необходимости хранить эти данные, они нужны только для обработки.

тесты проводились ? за сколько импорт впихивает теже 100 тонн записей в реальную таблицу ?


Сам insert практически не отличается - 5-10% падает производительность. Очень много времени тратится на создание самой таблицы и ее удаление.


mitek
Dmitry Y.
Такие файлы поступают постоянно ( с переодичностью раз в час) и их надо на основании данных таблиц в db2 обрабатывать.

раз в час это совсем немного. я думал как минимум раз в минуту :)


Да, только файликов там 50 штук :) Если делать последовательно, то в час не уложится.

mitek
Dmitry Y.
100.000 за 15 сек меня бы устроило, но я не могу добиться такой производительности. По 25 записей 20.000 улетают в таблицу за минуту на не самых слабых железках.
:) конфиг железок в студию
странно как-то, а инсертите из проги какой или clp-скриптом ?

Linux rubl 2.6.22-14-server #1 SMP Tue Feb 12 03:10:53 UTC 2008 x86_64 GNU/Linux
Install Path Level Fix Pack Special Install Number Install Date
--------------------------------------------------------------------------------------------
/opt/ibm/db2/V9.1 9.1.0.4 4 Thu Dec 20 04:03:56 2007 MSK



2 проца по 2 ядра 3.2Ггц, 4 Гб оперы. Все как по уставу:)


Инсертаем своим парсером файла на с++.
...
Рейтинг: 0 / 0
11.07.2008, 13:47
    #35425492
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Вообще как дб2 переносит если statement более 32кб, скажем 5Мб? Чтото тут не так.
...
Рейтинг: 0 / 0
11.07.2008, 13:51
    #35425513
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
http://www-128.ibm.com/developerworks/db2/library/tips/dm-0403wilkins/


еще по теме.

Делаю также как там рекомендуют. Даже commit не делаю вообще пока.
...
Рейтинг: 0 / 0
11.07.2008, 13:58
    #35425533
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Dmitry Y. Victor MetelitsaCLI умеет работать с массивами параметров, и, стало быть, используя выражение вида
INSERT INTO TABLE(col1,col2) VALUES (?,?)


Скорее так:

INSERT INTO TABLE(col1,col2) VALUES (?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?),(?,?).....

Я б этом и говорю.

А я не об этом. Я про Binding parameter markers in CLI applications with column-wise array input и Binding parameter markers in CLI applications with row-wise array input . Хотя одно другому не мешает.
...
Рейтинг: 0 / 0
11.07.2008, 14:06
    #35425563
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Victor Metelitsa
А я не об этом. Я про Binding parameter markers in CLI applications with column-wise array input и Binding parameter markers in CLI applications with row-wise array input . Хотя одно другому не мешает.

Во, надо покапать. Insert делать через bind. Кто -ньдь пробовал?
...
Рейтинг: 0 / 0
11.07.2008, 14:13
    #35425584
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007254.htm

Про bind
...
Рейтинг: 0 / 0
11.07.2008, 14:23
    #35425615
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Да LOAD лучше всех. Понятно, GLOBAL TEMPORARY TABLE не воспользуешься. Но какая необходимость каждый раз пересоздавать таблицы? Предыдущие же данные LOAD прекрасно грохнет сам.
...
Рейтинг: 0 / 0
12.07.2008, 00:09
    #35426572
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Вот Ваш LOAD на Си.
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007871.htm


Это тот самый BIND Insert.
Реализовал я его для себя. Замечательно грузит за пол секунды во временные таблицы по 1000 записей за транзацию. Причем тут уже все уперлось в сам парсер файла (надо будет подоптимизировать и его) тк проц на машине, где идет парсинг под 100% загрузки.


Все тема закрыта. Всем спс.
...
Рейтинг: 0 / 0
12.07.2008, 00:10
    #35426574
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Правильная ссылко
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007871.htm
...
Рейтинг: 0 / 0
12.07.2008, 00:12
    #35426575
Dmitry Y.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация Insert
Правильная ссылко вот
http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/ad/samples/cli/s-tbload-c.htm
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Оптимизация Insert / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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