Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bcp in parallel / 11 сообщений из 11, страница 1 из 1
18.04.2020, 01:32
    #39948529
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
приветствую

имеется предположение, возможно ложное, что можно загрузить файльі в таблицу параллельно при помощи только bcp.
Лично я делал єто только при помощи SSIS как-то давно

Например
имеються файльі
abc_1.csv
abc_2.csv
..
..
abc_N.csv

Если не ошибаюсь, то единственное условие - BULK UPDATE(BU) lock на целевой таблице.
Если вьіполнять, по 2-а файла
bcp abc_1.csv
bcp abc_2.csv
в concurrent threads - будет ли работать ?
...
Рейтинг: 0 / 0
18.04.2020, 03:24
    #39948534
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Грузить параллельно надо в разные таблицы или партиции. Остальное будет плохо.
...
Рейтинг: 0 / 0
18.04.2020, 08:53
    #39948546
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
_human
в concurrent threads - будет ли работать ?
Да, таблицы будут залочены для обычных изменений, но не от параллельной вставки балком.
Гавриленко Сергей Алексеевич
Грузить параллельно надо в разные таблицы или партиции. Остальное будет плохо.
По моему, 2 потока BULK INSERT в одну таблицу будет выполняться так же, как 2 потока BULK INSERT в 2 таблицы
...
Рейтинг: 0 / 0
20.04.2020, 08:11
    #39948844
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
_human,
Должно хорошо работать параллельно, если целевая таблица IN-MEMORY буфер.

Если это не подходит, сделайте несколько разных таблиц, с одинаковой структурой и потом скиньте загруженные данные в одну таблицу с помощью switch partition. Надо думать над схемой партиционирования.

На и попробуйте параллельно лить в одну, но проработайте вопрос с кластерным ключом, чтобы одна загрузка заливала по одному диапазону кластерного индекса, а другая по другому.
...
Рейтинг: 0 / 0
20.04.2020, 12:13
    #39948902
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
_human,

Одновременная загрузка в таблицу возможна в разные секции таблицы, при этом таблица должна иметь кластерный индекс. Параллельная загрузка в секционированную кучу невозможна.
...
Рейтинг: 0 / 0
20.04.2020, 13:30
    #39948919
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Грузить в секционированную таблицу напрямую не нужно - будет медленно и печально. Автору же нужно быстро, раз рассматривает многопоточность.
...
Рейтинг: 0 / 0
20.04.2020, 15:53
    #39948991
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Критик,

насколько медленно? Зависит от хранилища. Но простоя из-за несовместимости блокировки при вставке нет. Параллельная вставка работает только внутри плана запроса, т.е. для внешнего источника единственный выход - загрузка каждого файла в свою секцию.
...
Рейтинг: 0 / 0
20.04.2020, 17:00
    #39949024
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Собственно загрузку в секции я и делал, когда надо было загрузить данные нескольких регионов с удалённого сервера в одну таблицу. По крайней мере, получилось быстрее, чем последовательная загрузка.
...
Рейтинг: 0 / 0
20.04.2020, 23:39
    #39949142
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Владислав Колосов
Критик,

насколько медленно? Зависит от хранилища. Но простоя из-за несовместимости блокировки при вставке нет. Параллельная вставка работает только внутри плана запроса, т.е. для внешнего источника единственный выход - загрузка каждого файла в свою секцию.


раза в 2 медленнее было, когда я тестил на MS SQL 2014 - там пересортировка шла в tempdb,
на последних версиях не знаю, может уже есть подсказка грузить напрямую или переделали саму загрузку
...
Рейтинг: 0 / 0
21.04.2020, 13:56
    #39949333
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Критик,

у меня автосоздание ключа, просто наполнение хранилища, из которого удаляются все записи перед загрузкой. Ускоренная перекачка с сервера на сервер с мелкими преобразованиями. Затем это хранилище обрабатывается другими процессами.
...
Рейтинг: 0 / 0
22.04.2020, 10:00
    #39949877
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bcp in parallel
Рабоотает

select @@VERSION
/*Microsoft SQL Server 2019 (RTM-CU3) (KB4538853) - 15.0.4023.6 (X64) Mar 4 2020 00:59:26 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Linux (Ubuntu 18.04.4 LTS) <X64>*/

Код: plaintext
1.
seq 15 | parallel -j 4 --workdir $PWD /opt/mssql-tools/bin/bcp tempdb.dbo.sample_in IN /data/sample_{}.bcp -c -b 10000 -h "TABLOCK" -S <server> -U <user> -P <password>


15 items, totalling 10,8 GB

в 4-е потока
228 sec vs 608 sec

хотя хинтьі ROWS_PER_BATCH или KILOBYTES_PER_BATCH заставить работать не получилось, только -b распознает
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bcp in parallel / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]