массовая копия - sybase - PullRequest
       3

массовая копия - sybase

2 голосов
/ 31 октября 2010

Мне нужно выборочно (и строки, и столбцы) экспортировать около 20 миллионов строк из одной таблицы в другую. Вот что я попробовал:

--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1 
where A > a and B < b

---Table1 have columns A, B....Z and got around 50 million records. 

Требуется около 12 часов, чтобы закончить. Я не думаю, что sybase позволяет bcp с выборочными столбцами и строками из Table1 и bcp в Table2 Есть ли альтернативный быстрый подход, который можно использовать? Я был бы счастлив, если бы это могло быть сделано <4 часа. </p>

Спасибо за чтение.

1 Ответ

1 голос
/ 01 ноября 2010

Я думаю, вы имеете в виду:

WHERE PK > start_value AND PK < end_value

Нет веских оснований для дублирования данных в двух таблицах на одном сервере, поэтому, надеюсь, таблицы находятся на разных серверах.Если вы «архивируете», то имейте в виду, что это неправильно;вместо этого увеличьте скорость стола.См. этот пост .

  1. Чтобы INSERT-SELECT уничтожил журнал транзакций, который для вас будет работать все медленнее, и запретит другим пользователям использовать базу данных.Если вы разбиваетесь на партии по 1000 строк, это будет быстрее и более общительным.

Я был бы рад, если бы это можно было сделать <4 часа </em>

Должно быть никаких проблем.Зависит от вашего оборудования и расположения дисков.Я могу загрузить 16 миллионов строк за 13,2 секунды на моем небольшом демонстрационном окне с ASE 15.5.

bcp работает в двух режимах, автоматически, в зависимости от следующих условий:

  • БЫСТРО.для этого требуется установить SELECT_INTO / BULK_COPY sp_dboption, что позволяет bcp НЕ регистрировать INSERTS, только распределения.Также требует удаления индексов на столе (они могут быть созданы после окончания bcp).

  • SLOW.Любое из вышеперечисленных условий не выполняется.Все ВСТАВКИ зарегистрированы.Убедитесь, что у вас есть порог в журнале, который его сбрасывает (он будет заполняться).

Нет проблем, если файл out_data_file или Table_2 является подмножествомстолбцы таблицы_1.Создайте представление Table_2 на сервере Table_1.Bcp-out мнение.Вы также можете поместить предложение WHERE в представление, выполнить преобразования и т. Д.

Вы можете выполнить bcp параллельно (до количества процессоров / ядер, которые есть в вашей хост-системе),Разделите экстракт на количество параллельных потоков (например, на 8-ядерном компьютере, exec 8 извлекает задания параллельно).Используйте параметры -F и -L, чтобы указать одну восьмую таблицы_1.Используйте «&», если у вас есть файлы o / s и 8 x BAT, если у вас их нет.

Вы также можете запускать (например) 8 x заданий INSERT-SELECT параллельно.Разделить по значению PK, а не по номеру строки.

...