Проблеми с миграцията: MS SQL › MySQL: Вмъкване на буферна памет

Имам проблем с използването на вградения инструмент за миграция на MySQL workbench.

Мигрирам много голяма база данни от MS SQL 2014 към MySQL.

MS SQL сървърът е разположен локално на моя работен плот (Windows 8.1), а MySQL сървърът работи в моята мрежа върху Ubuntu Server.

Получавам поредица от следните грешки на последния етап на „групово прехвърляне“ на миграцията.

`VHR_AGE`.`FlxTable`:Copying 33 columns of 311 rows from table [VHR_AGE].[dbo].[FlxTable]
ERROR: `VHR_AGE`.`FlxTable`:Not enough memory to allocate insert buffer of size 1073741824
`VHR_AGE`.`FlxTable`:Finished copying 0 rows in 0m00s

Схемите на таблиците са мигрирали добре, проблемът е ограничен до прехвърлянето на самите данни.

Ако има някаква конкретна променлива, която бихте искали да видите, за да помогнете за диагностицирането на проблема, моля, просто попитайте и аз ще ги предоставя незабавно.

Всяка помощ по този въпрос би била страхотна, всички източници онлайн бяха фалшиви.

Редактиране: Дори не съм сигурен дали MS SQL или MySQL хвърля грешката в размера...


person Kirk Logan    schedule 01.07.2014    source източник
comment
Как мигрирате чрез SQL дъмп? С активирани транзакции?   -  person brummfondel    schedule 08.07.2014
comment
Миграцията се извършва чрез вградения инструмент на mysql workbench. Той директно взаимодейства с двата сървъра и създава и изпълнява необходимия SQL за миграция.   -  person Kirk Logan    schedule 08.07.2014


Отговори (6)


Тъй като това е преди повече от година, може вече да сте решили този проблем, но може би други (като мен) имат същия проблем и затова искам да добавя моето решение:

В някакъв форум на MySQL намерих човек, който публикува формула и след като я изчислих за моя сървър и моята система, разбрах, че съм се опитал да използвам 2 GB твърде много RAM, която системата нямаше. Ето го и се надявам да помогне на някого.

RAM = innodb_pool_buffer_size + key_buffer_size + 
   ( (read_buffer_size + sort_buffer_size + read_rnd_buffer_size + join_buffer_size)
         * max_connection )
person Alea M    schedule 07.01.2016
comment
Благодаря за публикацията! В крайна сметка просто преместих таблиците на парчета, вместо да преместя 3 масивни бази данни наведнъж. Благодаря за формулата! - person Kirk Logan; 07.01.2016

По всичко личи, че грешката е в MySQL. Опитайте да настроите параметъра bulk_insert_buffer_size на вашия MySQL сървър.

person Liviu Chircu    schedule 05.07.2014
comment
Благодаря за отговора, това е първото нещо, което опитах. Пуснах го на 4G и нямаше ефект. - person Kirk Logan; 06.07.2014

Това изглежда като проблем с паметта на всеки сървър, който хоства базата данни MYSQL. Изглежда, че нямате 1 GB свободна памет, за да вмъкнете новите данни наведнъж (в предишен отговор посочихте, че вече сте променили параметъра bulk_insert_buffer_size). Можете да:

  • Затворете някои приложения и вижте дали ще освободи достатъчно място.
  • Разбийте експортираните си данни на по-малки части и ги вмъкнете на по-малки стъпки (т.е. създаване на изгледи или нещо друго на MS SQL сървъра)
  • Направете една стъпка напред и вмъквайте ред по ред (което може да отнеме много време)
person ccray    schedule 07.07.2014
comment
Мислех и за това, добавих 8G RAM към сървъра и все още генерираше същата грешка. - person Kirk Logan; 08.07.2014

Може да искате да разгледате това. Този разработчик мигрира данните с помощта на програма, наречена Достъп до MYSQL, която изглежда доста обещаващо.

person Aravind    schedule 09.07.2014
comment
Това е достъп до MySQL, търся MS SQL специално за MySQL. - person Kirk Logan; 10.07.2014
comment
Прочетохте ли блога? Първо преместете базите данни от mssql за достъп. Това е толкова просто, колкото да напишете някои заявки или да използвате този конвертор и след това да направите своята миграция към MySQL . - person Aravind; 10.07.2014
comment
Единственият начин, който видях да го преместя в Access, е да го направя таблица по таблица, което е точно това, което исках да избегна. Ако имате начин да изхвърлите групово база данни в Access, уведомете ме. - person Kirk Logan; 10.07.2014

Предлагам ви да използвате инструмента интеграция на данни на Talend. Доста лесно е да създадете карта на задачите на вашите таблици и след това да започнете работата. Той ще се погрижи за размера на партидата и други неща.

Имах огромна MSSQL база данни, която мигрирах към MySQL, свърши добра работа. Дори имах някои структурни промени в MySQL в сравнение с MSSQL. Има хубав GUI, можете просто да картографирате колоните чрез WYSIWYG. Той е изграден върху Eclipse, така че ако сте използвали eclipse преди, изглежда познато.

person bitkot    schedule 09.07.2014

Дълго време се занимавах с този проблем и най-накрая намерих решението. Съобщението за грешка тук е много двусмислено. Не е необходимо да добавяте повече памет към вашата система, просто трябва да намалите размера на пакета. Тази грешка възниква, защото mysql се опитва да формира пакети с по-големи количества и продължава да се проваля.

Съобщението за грешка: Няма достатъчно памет за заделяне на буфер за вмъкване с размер 1073741824

Ако просто намалите размера на буфера, ще работи за вас. Трябва да опитате да го намалите до ~64.

person SaneSpeaker    schedule 29.10.2015
comment
Аз също съм изправен пред същия проблем. Как да намалите размера на буфера с помощта на mysql workbench? - person CST RAIZE; 24.12.2015