Страница 1 из 2

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

Добавлено: 22 ноя 2006, 15:53
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 каким -то образом отключить логи на время этих операций, или ещё что...

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

Спасибо.

Добавлено: 22 ноя 2006, 16:19
папа Карло
чем копируешь ? bcp? tablock используешь? общий размер таблицы в которую вливаете? индыксы в таблице перед вливанием сбрасываете и после создаете?

3 млн записей за 7-9 часов....... это ОЧЕНЬ медленно.

Добавлено: 22 ноя 2006, 16:38
BB
В добавку к Папе... Если на TableBackup есть триггеры - disable. Какая Recovery Model на MS SQL'ной базе? Еще можно поиграть с размером batch'а (если, конечно, копирование идет batch'ами)

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

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

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

Добавлено: 22 ноя 2006, 19:56
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) Индексов думаю там нет. Хотя проверю. Впринципе, это может быть причиной, если там оставили индексы.

Добавлено: 22 ноя 2006, 21:05
папа Карло
vg писал(а):Там в цикле read record - insert record.
вот это проблема. надо зачитывать и вваливать то дело в файл, который потом надо вливать с помощью bcp, используя хинт tablock.

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

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.

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

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

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

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

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

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
личше так не надо делать.... loosely coupled systems u know :)

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

Мы так выкачивали данные из удаленной Sybase системы, работает быстро плюс достаточная свобода в манипулировании системными ресурсами.
личше так не надо делать.... loosely coupled systems u know :)
Ну там то вариантов особых не было, либо напрямую из базы, которую мы никак не контролируем, либо раз в день по FTP. Правда не все ODBC драйвера вели себя одинаково, но всетаки нашелся один.

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