Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 INSERT большого количества записей  [new]
rhizhny
Member

Откуда:
Сообщений: 5
Здравствуйте!

fb 2.5.9 SS, OS Win10Pro, DBeaver 21.2.3.

Посоветуйте как лучше скопировать из одной таблицы в другую около 37 млн записей. Таблицы с одинаковой структурой. В таблице приёмнике около 130 млн. записей.

Я воспользовался простой инструкцией из "Руководства":
INSERT INTO TRAFFIC_T
SELECT *
FROM TRAFFIC_T_2


Процесс идёт уже 27 часов, прогресс не отображается, база распухла на 7 Гб, записей в таблице приёмнике не прибавилось.
Перед этим копирование таблицы из одной базы в другую посредством IBExpert заняло всего 74 минуты.

Из поиска я выяснил, что надо менять настройки конфигурации, отключить индексы у таблицы приёмника, запускать скрипт в ISQL и разбивать процесс на блоки.
Если можно, какие-нибудь примеры, где есть подробное описание. Это не моя специальность, пытаюсь разобраться. До этого только немного Access использовал.
28 окт 21, 16:55    [22389493]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
rhizhny
записей в таблице приёмнике не прибавилось.


ты их не увидишь пока транзакция не завершится. В Firebird нет грязного чтения.

Для ускорения вставки надо
- временно отключить индексы и удалить ограничения на таблице приёмнике
- временно деактивировать триггеры на таблице приёмнике

Если операция не разовая, лучше застрелится и поменять консерваторию
28 окт 21, 17:12    [22389495]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
rhizhny
Member

Откуда:
Сообщений: 5
Симонов Денис,

Спасибо. А можно хотя бы приблизительно оценить время, которое потребуется для выполнения этой операции?
28 окт 21, 17:16    [22389497]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
AltHasp
Member

Откуда:
Сообщений: 205
rhizhny
Эти таблицы у вас в одной базе находятся или в разных базах?
Если записей в таблице приёмнике не прибавилось, вероятно все инсерты идут в одной транзакции, лучше чаще делать коммиты (например после каждого 500-ого инсерта).
Вам никто не укажет на универсальную волшебную кнопку. Скорость зависит от железа (дисковой системы например), от фрагментации диска и пр. Какой у вас RAID сконфигурирован? Какие настройки сервера или все по умолчанию стоит?
28 окт 21, 17:20    [22389498]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
rhizhny
Member

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

В данный момент в одной базе. Изначально это было две базы с разным набором данных в одной таблице и одинаковыми справочниками.

Я понимаю, что волшебной кнопки нет, поэтому и прошу какие-то мануалы поподробнее. Может кто-то уже описывал подобное.

Никакого рейда, я установил Firebird на свой локальный компьютер. HDD ST1000DM010-2EP102. Диспетчер показывал для FB скорость около 5 МБ/с чтения и 2-3 МБ/с записи. Загрузка около 90% была.
Все настройки по умолчанию.

Ну и буквально только что, пока набирал сообщение DBeaver прекратил выполнение скрипта с ошибкой:
SQL Error [08003]: This connection is closed and cannot be used now.
28 окт 21, 17:46    [22389515]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8877
rhizhny
HDD ST1000DM010-2EP102. Диспетчер показывал для FB скорость около 5 МБ/с чтения и 2-3 МБ/с записи. Загрузка около 90% была.
типовой механический диск - это примерно 100 иопсов, множим на типовую страницу 8к получаем 0,8 мегабайт в секунду в самом худшем случае, получается у тебя пишется 10 страниц за одно обращение к диску вот и твоя цифирь. собственно и все - скорость уперлась в диск. варианты:
1. заменить механический диск на твердотельный
2. на время заливки перевести файл базы в режим асинхронной записи (gfix с кчючами asinc / sinc)

Да в базе до твоих манипуляций мог быть мусор, на его приборку тоже тратятся иопсы диска.
28 окт 21, 18:45    [22389551]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
rhizhny
Member

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

Спасибо. Буду экспериментировать.
28 окт 21, 18:51    [22389554]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
AltHasp
Member

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

Зачем вам эксперименты? Уже вам намекнули-же:
- Временно выключить у базы ForcedWrites, отключить индексы и тригеры на вставку;
- Подкрутить конфиг ЖарПтицы для увеличения выделения большого размера страниц;
- Установить дополнительный SSD диск, выделить базe отдельный раздел;
- Инсерты обернуть коммитом по 500, и вывод счетчика после 500 вставок, чтобы видеть прогресс вставки;
А поля с блобами есть в вашей таблице ?

P.S.
на FB3 вставка идет заметно быстрее.

Если просто побаловаться, то дерзайте!
Удачи !
28 окт 21, 19:27    [22389565]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
rhizhny
Member

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

Если какие-то вещи делаешь в первый раз, то это это всегда эксперимент - получится или нет? Даже если более опытные люди тебе сказали, что получится. Ведь личный опыт отсутствует.

BLOB нет, только дата, текст и числа.

Про конвертацию базы в FB3 уже думал. Надеюсь, это не настолько длительная операция, как INSERT. Собственно, всё началось с попытки подключить базу к FB4, незнания версии базы и непонимания, почему смена версии сервера при подключении не оказывает влияния.

Ну и не баловство это, данные нужны для работы. А получение в процессе работы навыков обращения с популярной СУБД - это личное желание. Такие навыки лишними не будут. Конечно, в идеале, надо изучать последовательно, с азов, но что-то у меня так не выходит.

Так что большое спасибо за то что делитесь своим опытом с новичками.
28 окт 21, 21:10    [22389602]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
pastor
Member

Откуда: Калуга
Сообщений: 1313
rhizhny,

20 gb из одной базы в другую - около 40 мин. это insert, update

7 gb за 74 мин - по ту сторону добра

1.начните с ForcedWrites.

2. перед переносом сделайте backup с ключиком -r и restore

3. если размер страницы остался от пращуров в 4k, то рестор делайте со страницей 16k.

4. посмотрите на глубину индексов в статистике. если на Вашей маленькой(?) странице она 4 и более - тормозить будет независимо ни от чего.
увеличивайте страницу.
28 окт 21, 22:03    [22389629]     Ответить | Цитировать Сообщить модератору
 Re: INSERT большого количества записей  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30244
pastor
backup с ключиком -r

-g
28 окт 21, 22:50    [22389647]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить