Как увеличить скорость insert (MySQL->MSSQL)

Все, что вы хотели знать о программизме, но боялись спросить.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Как увеличить скорость insert (MySQL->MSSQL)

Сообщение vg »

Каждый день, все данные из таблиц Table на нескольких MySQL серверов должны быть скопированы в одну таблицу TableBackup на Microsoft SQL Server 2000.
В принципе, суммарное число записей для копирования невелико ~2 000 000 - 3 000 000.

Пока база на Microsoft SQL Server 2000 невелика, всё идёт сносно. При размере базы (где TableBackup) порядка ~ 300 Gbt, копирование занимает ~ 7-9 часов, что критично.

Можно ли на Microsoft SQL Server каким -то образом отключить логи на время этих операций, или ещё что...

Как увеличить скорость копирования???

Спасибо.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

чем копируешь ? bcp? tablock используешь? общий размер таблицы в которую вливаете? индыксы в таблице перед вливанием сбрасываете и после создаете?

3 млн записей за 7-9 часов....... это ОЧЕНЬ медленно.
BB
Частый Гость
Сообщения: 41
Зарегистрирован: 02 авг 2005, 16:14
Откуда: Vancouver

Сообщение BB »

В добавку к Папе... Если на TableBackup есть триггеры - disable. Какая Recovery Model на MS SQL'ной базе? Еще можно поиграть с размером batch'а (если, конечно, копирование идет batch'ами)
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

BB писал(а):В добавку к Папе... Если на TableBackup есть триггеры - disable. Какая Recovery Model на MS SQL'ной базе? Еще можно поиграть с размером batch'а (если, конечно, копирование идет batch'ами)
если это продакшен, то чтоб играть рековери моделью надо знать точно что делаешь.. если не знаешь, то использовать надо Full.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):
BB писал(а):В добавку к Папе... Если на TableBackup есть триггеры - disable. Какая Recovery Model на MS SQL'ной базе? Еще можно поиграть с размером batch'а (если, конечно, копирование идет batch'ами)
если это продакшен, то чтоб играть рековери моделью надо знать точно что делаешь.. если не знаешь, то использовать надо Full.
Simple
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

BB писал(а):В добавку к Папе... Если на TableBackup есть триггеры - disable. Какая Recovery Model на MS SQL'ной базе? Еще можно поиграть с размером batch'а (если, конечно, копирование идет batch'ами)
Тригеров нет. Эта таблица своеобразный бекап, который мы обязаны хранить долго. Таковы правила.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):чем копируешь ? bcp? tablock используешь? общий размер таблицы в которую вливаете? индыксы в таблице перед вливанием сбрасываете и после создаете?

3 млн записей за 7-9 часов....... это ОЧЕНЬ медленно.
1 ) 6 часов отрабатывает MS job построенный на packages DTS.
9 часов и более работает моё приложение (VB.NET). Сливает данные, прочитав с MySQL серверов. Там в цикле read record - insert record.
Для чтения из MySQL, и вставки на MSSQL используется ADO.NET.
DTS API хотелось бы избежать (DTS валится по какой-то причине при работе с MySQL в качестве источника или назначения)

2) Общий размер таблицы в которую вливаем - около 300 Gbt.

3) Индексов думаю там нет. Хотя проверю. Впринципе, это может быть причиной, если там оставили индексы.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

vg писал(а):Там в цикле read record - insert record.
вот это проблема. надо зачитывать и вваливать то дело в файл, который потом надо вливать с помощью bcp, используя хинт tablock.
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

Можно и хранимую процедуру написать в MS SQL.
Ключевые слова
sp_addlinkedserver для подключения к удаленной базе через имеющийся драйвер (например ODBC)
и
openquery или ее аналоги для выполнения select запроса на удаленном сервере.

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

ura писал(а):Можно и хранимую процедуру написать в MS SQL.
Ключевые слова
sp_addlinkedserver для подключения к удаленной базе через имеющийся драйвер (например ODBC)
и
openquery или ее аналоги для выполнения select запроса на удаленном сервере.

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
1) Так (почти так) делали используя DTS. Если данных не много - работает. Если порядка 2 000 000 записей - валится. Говорит идиотские вещи, что мол ODBC MySQL не хватило 2G памяти.
2) Так не прокатит по другой причине. Своеобразные JOB-ы должны крутиться именно на MySQL серверах. Там много чего делается и синхронизируется перед тем как на послених тасках джоба начать копировать данные.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):
vg писал(а):Там в цикле read record - insert record.
вот это проблема. надо зачитывать и вваливать то дело в файл, который потом надо вливать с помощью bcp, используя хинт tablock.
Да это будет работать. Чуствую. Спасибо за совет. И кстати более надёжно. К тому же файло можно будет поджать перед прокидыванием по сетке.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

vg писал(а):
папа Карло писал(а):
vg писал(а):Там в цикле read record - insert record.
вот это проблема. надо зачитывать и вваливать то дело в файл, который потом надо вливать с помощью bcp, используя хинт tablock.
Да это будет работать. Чуствую. Спасибо за совет. И кстати более надёжно. К тому же файло можно будет поджать перед прокидыванием по сетке.
попробуй сначала без архивирования.... выкачал фйл и влил его бисипой в базу... померяй... должно быть гораздо быстрее... если конечно основное время не уходит на чтение из майсиквела.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

ura писал(а):Можно и хранимую процедуру написать в MS SQL.
Ключевые слова
sp_addlinkedserver для подключения к удаленной базе через имеющийся драйвер (например ODBC)
и
openquery или ее аналоги для выполнения select запроса на удаленном сервере.

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
личше так не надо делать.... loosely coupled systems u know :)
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

папа Карло писал(а):
ura писал(а):Можно и хранимую процедуру написать в MS SQL.
Ключевые слова
sp_addlinkedserver для подключения к удаленной базе через имеющийся драйвер (например ODBC)
и
openquery или ее аналоги для выполнения select запроса на удаленном сервере.

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
личше так не надо делать.... loosely coupled systems u know :)
Ну там то вариантов особых не было, либо напрямую из базы, которую мы никак не контролируем, либо раз в день по FTP. Правда не все ODBC драйвера вели себя одинаково, но всетаки нашелся один.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):
vg писал(а):
папа Карло писал(а):
vg писал(а):Там в цикле read record - insert record.
вот это проблема. надо зачитывать и вваливать то дело в файл, который потом надо вливать с помощью bcp, используя хинт tablock.
Да это будет работать. Чуствую. Спасибо за совет. И кстати более надёжно. К тому же файло можно будет поджать перед прокидыванием по сетке.
попробуй сначала без архивирования.... выкачал фйл и влил его бисипой в базу... померяй... должно быть гораздо быстрее... если конечно основное время не уходит на чтение из майсиквела.
Майсиквел делает тоже за 1 час. Чтение тоже очень быстрое. Проверял.
Ответить