Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Задача - запихнуть файл данных во временную таблицу для последующей обработки. После парсинга файла получаем набор 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 Где копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2008, 19:49 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Может проще воспользоваться утилитой импорт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 08:24 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
т.е 50 записей вставляются за 30мс, а 500 записей вставляются уже за 10 сек ? я правильно понял ? А темп таблицы обязательно юзать ? И что значит "надо обрабатывать постоянно" ? У вас обработка параллельными сессиям чтоли ? Простой импорт в реальную таблицу 100000 записей шириной в почти килобайт на моем не самом мощном писюке проходит за ~ 15 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 10:50 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
mitekт.е 50 записей вставляются за 30мс, а 500 записей вставляются уже за 10 сек ? я правильно понял ? Да, если делать 1 транзакцией. Получается самое оптимальное вставлять по 25 записей, что конечно мне кажется неправильным. mitek А темп таблицы обязательно юзать ? Обычные таблицы еще дольше работают, и нет необходимости хранить эти данные, они нужны только для обработки. mitek И что значит "надо обрабатывать постоянно" ? У вас обработка параллельными сессиям чтоли ? Такие файлы поступают постоянно ( с переодичностью раз в час) и их надо на основании данных таблиц в db2 обрабатывать. 100.000 за 15 сек меня бы устроило, но я не могу добиться такой производительности. По 25 записей 20.000 улетают в таблицу за минуту на не самых слабых железках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 12:08 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
CLI умеет работать с массивами параметров, и, стало быть, используя выражение вида INSERT INTO TABLE(col1,col2) VALUES (?,?) можно вставлять разом кучу строк. Утилита import, надо полагать, пользуется этой возможностью. Утилита load будет ещё быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 12:10 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
xz321Может проще воспользоваться утилитой импорт? Куда интересней как импорт вставляет данные в таблицу так быстро, чтобы сделать также. Чтото мне подсказывает, что она делает это тем же SQL ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 12:12 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 12:18 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Dmitry Y. Обычные таблицы еще дольше работают, и нет необходимости хранить эти данные, они нужны только для обработки. тесты проводились ? за сколько импорт впихивает теже 100 тонн записей в реальную таблицу ? Dmitry Y. Такие файлы поступают постоянно ( с переодичностью раз в час) и их надо на основании данных таблиц в db2 обрабатывать. раз в час это совсем немного. я думал как минимум раз в минуту :) Dmitry Y. 100.000 за 15 сек меня бы устроило, но я не могу добиться такой производительности. По 25 записей 20.000 улетают в таблицу за минуту на не самых слабых железках. :) конфиг железок в студию странно как-то, а инсертите из проги какой или clp-скриптом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 12:45 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
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 Гб оперы. Все как по уставу:) Инсертаем своим парсером файла на с++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 13:44 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Вообще как дб2 переносит если statement более 32кб, скажем 5Мб? Чтото тут не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 13:47 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
http://www-128.ibm.com/developerworks/db2/library/tips/dm-0403wilkins/ еще по теме. Делаю также как там рекомендуют. Даже commit не делаю вообще пока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 13:51 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
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 . Хотя одно другому не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 13:58 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
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. Кто -ньдь пробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 14:06 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007254.htm Про bind ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 14:13 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Да LOAD лучше всех. Понятно, GLOBAL TEMPORARY TABLE не воспользуешься. Но какая необходимость каждый раз пересоздавать таблицы? Предыдущие же данные LOAD прекрасно грохнет сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2008, 14:23 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Вот Ваш LOAD на Си. http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007871.htm Это тот самый BIND Insert. Реализовал я его для себя. Замечательно грузит за пол секунды во временные таблицы по 1000 записей за транзацию. Причем тут уже все уперлось в сам парсер файла (надо будет подоптимизировать и его) тк проц на машине, где идет парсинг под 100% загрузки. Все тема закрыта. Всем спс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2008, 00:09 |
|
||
|
Оптимизация Insert
|
|||
|---|---|---|---|
|
#18+
Правильная ссылко http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/t0007871.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2008, 00:10 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1603794]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 397ms |

| 0 / 0 |
