Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Сбой при пересылке из SQL в DB2  [new]
ДмитрийV
Member

Откуда:
Сообщений: 7
Вопрос начинающего.
Установил DB2 9.2 express, нужно перекинуть из SQL таблицу в 50 млн записей. Установил дома, на станции. 2 гига оперативы, 1 двухъядерный проц, места на диске - 60 Гб. Перекидываю экспортом данных из SQL. 16 млн перекинулось - вылетел "не хватает памяти". Центр команд на SELECT COUNT(*) FROM Calc отвечает, что, возможно, полны журналы. Увеличиваю количество журналов до 50, выделяю каждому размер в 5000, разбиваю исходную таблицу на 3. Первая таблица в 12 млн записей проходит нормально. На второй вылетает. Считаю записи в DB2 около 16 млн, чуть меньше. В документации написано, что ограничений на размер базы нет. Следил за журналами - нормально перезаписывались 3 раза, все 50. В чём дело? Может, есть-таки какие-то ограничения?
26 мар 11, 19:38    [10427924]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
askfinder
Member

Откуда: г.Барнаул
Сообщений: 61
ДмитрийV,

Попробуй при импорте указать COMMITCOUNT N , где N - число записей после которых делать принятие в БД.
26 мар 11, 20:12    [10428020]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
ДмитрийV
Member

Откуда:
Сообщений: 7
askfinder,

Я экспортирую стандартными средствами MSSQL, импортировать из DB2 пока не умею, даже не знаю - где это. Сейчас заливаю данные из третьего файла в другую таблицу, пока нормально прошли 2 млн. Там видно будет - попробую слить в одну, если позволит и не вылетит.
26 мар 11, 20:36    [10428104]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
ДмитрийV
Member

Откуда:
Сообщений: 7
ДмитрийV,

Гражане, ну это - издевательство. Целый день протрахался, потом плюнул, запустил ещё раз, пошёл спать. Утром встаю - "команда выполнена успешно".
27 мар 11, 10:20    [10428917]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
GVF112GVF
Guest
ДмитрийV
ДмитрийV,

Гражане, ну это - издевательство. Целый день протрахался, потом плюнул, запустил ещё раз, пошёл спать. Утром встаю - "команда выполнена успешно".


Очень хорошо! В своя время Я выполнял IMPORT данных из MS SQL стандартными средствами IBM DB2 (db2 import & db2 load).
Точно не помню, но у меня 50 000000 загружалось в течение 5-минут (выполнял commit через каждые 100000 записей для таблиц фактов).

Для простых таблиц (скрипт):

IMPORT FROM "/database/import/dataGenerator/big_dims_pub/tbl_Dim_Maxybox.csv"
OF DEL MODIFIED BY TIMESTAMPFORMAT="YYYY-MM-DD HH:MM:SS.UUUUUU" NOCHARDEL COLDEL0x09 COMMITCOUNT 1000
MESSAGES "/database/import/msg/tbl_Dim_Maxybox.txt"
INSERT_UPDATE INTO DBO.TBL_DIM_MAXYBOX;

Для таблиц фактов (скрипт):

LOAD FROM "/datatxt/dataGenerator/out_data/_fact_level_0_visitor_part_9.tsv"
OF DEL MODIFIED BY COLDEL0x09 NOCHARDEL TIMESTAMPFORMAT="YYYY-MM-DD HH:MM:SS.UUU"
MESSAGES "/database/import/msg/_fact_level_0_visitor_part.txt"
INSERT INTO DBO.TBL_FACT_VISITOR
NONRECOVERABLE DATA BUFFER 10000 SORT BUFFER 100000 CPU_PARALLELISM 10 DISK_PARALLELISM 16 INDEXING MODE AUTOSELECT ALLOW READ ACCESS USE TEMPSPACE1
ISOLATE_PART_ERRS NO_ISOLATION MODE PARTITION_AND_LOAD PARTITIONING_DBPARTNUMS (0, 1, 2, 3, 4);

SET INTEGRITY FOR DBO.TBL_FACT_VISITOR CHECK, MATERIALIZED QUERY, GENERATED COLUMN, STAGING, FOREIGN KEY IMMEDIATE UNCHECKED;

База данных с включенным режимом - Self tuning memory.
Log file size (4KB) (LOGFILSIZ) = 20000
Number of primary log files (LOGPRIMARY) = 30
Объем базы ~ 700 000 МБ

Думаю, что скорее всего DB2 не хватало ресурсов или ENGINE ожидал освобождение очередей.
Нужно смотреть файл db2diag.log (<instance-home>/sqllib/db2dump).

С уважением,
Вадим.
27 мар 11, 12:23    [10429140]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
9.2 express - ха, это новость.

Как я заметил, IMPORT, по сравнению с LOAD, очень медленный (или LOAD, по сравнению с IMPORT, очень быстрый). На больших объёмах разница гигантская - десятки и сотни раз.

Даже вместо

UPDATE COMMAND OPTIONS USING C OFF ;
drop index...
drop index...
alter table ... activate not logged initially...
insert into ...
create index...
create index...
runstats on table...
commit;

выгоднее
declare cursor ...
load -- from cursor...

Журнал один, а вот файлов в нём много. Есть primary-файлы, которые лежат на диске постоянно, и есть secondary, которые создаются по потребности и удаляются, когда в них нет нужды. Как бы то ни было, если 50 миллионов вставляются в одной транзакции insert'ами (ы том числе через IMPORT), под них в журнале должно быть достаточно места ( место определяется как (количество primary + количество secondary) * размер), ну, а LOAD без этого обходится, да ещё может и индексы побыстрее переделать и статистику собрать. Так что экспортировать в CSV-файлы и грузить их LOAD'ом может быть разумно.

А ещё для облегчения таких дел существуют бесплатные IBM Migration Toolkit и IBM Data Movement Tool.
27 мар 11, 19:18    [10430191]     Ответить | Цитировать Сообщить модератору
 Re: Сбой при пересылке из SQL в DB2  [new]
Andron
Member

Откуда: Cherepovets
Сообщений: 1816
Load работает быстрее чем Import, потому что грузит данные напрямую в страницы базы без журналирования. Import же делает загрузку через обычные insert, и журналирует эти инсерты. См. Load overview
28 мар 11, 08:52    [10431423]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить