Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ускорить импорт в БД  [new]
Badhabit
Member

Откуда:
Сообщений: 90
День добрый! Мне нужно ускорить импорт данных в MS SQL.
Ситуация следующая: у меня есть большие xml файлы (размером около 1ТБ) я их самописным парсером (написан на С++) разбираю и заливаю просто в .csv-файлы или в БД MS SQL через IRowsetFastLoad (OLE DB).
Так вот если лить просто в csv файлы скорость ограничена только скорость HDD т.е. получается примерно 7-9 ГБ в минуту, а если же заливать в БД то скорость падает примерно в 2 раза и максимум достигает 3.7-4.2 ГБ в минуту. (заливаю в БД с включенным TabLock).
Подскажите можно ли как-нибудь ускорить импорт в БД? Или все тщетно?
1 ноя 17, 10:23    [20918147]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Подскажите можно ли как-нибудь ускорить импорт в БД?
А зачем ? Просто примите текущую длительность за норму и всё...
Вставка в БД всегда будет дольше вставки в плоский файл. Ибо чудес не бывает.
1 ноя 17, 10:31    [20918165]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Badhabit
Так вот если лить просто в csv файлы скорость ограничена только скорость HDD т.е. получается примерно 7-9 ГБ в минуту, а если же заливать в БД то скорость падает примерно в 2 раза и максимум достигает 3.7-4.2 ГБ в минуту. (заливаю в БД с включенным TabLock).
Ну, не успевает клиент (скорее на стороне сиквела). Можно в несколько потоков заливать.
1 ноя 17, 10:39    [20918183]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
LSV
Вставка в БД всегда будет дольше вставки в плоский файл. Ибо чудес не бывает.
Вообще это как раз ссылка на "чудеса" :-)
С чего это ресурсы загружаются наполовину, почему диск простаивает? Потому что "в БД"?
Скорее, это не какое то чудо, а между командами записи на диск в коде в сиквеле вставлена команда "пауза". Конечно, не что бы позлить программистов, а потому что так было проще написать.
1 ноя 17, 10:42    [20918188]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Можно разбить таблицу на секции и параллельно лить н-потоков каждый в свою секцию. Другой вариант если памяти сверх меры, то можно InMemory таблицы использовать c опцией SCHEMA_ONLY. Относительно XML можно посмотреть в сторону SQLXMLBulkLoad и напрямую лить данные в таблицы.
1 ноя 17, 10:53    [20918225]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Badhabit
если же заливать в БД то скорость падает примерно в 2 раза и максимум достигает 3.7-4.2 ГБ в минуту. (заливаю в БД с включенным TabLock).

А таблица то какая, куда заливаете - heap/clustered, сколько некластерных индексов на ней? Отключаете вместе с constraint перед вставкой и потом включаете обратно или заливаете просто как есть?
1 ноя 17, 13:06    [20918705]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
Нектотам
Guest
Badhabit,

Нестареющая классика десятилетней давности уже прочитана?
The Data Loading Performance Guide
We Loaded 1TB in 30 Minutes with SSIS, and So Can You

Если да, то опишите более конкретно что является узким местом.
1 ноя 17, 13:08    [20918710]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
aleks222
Guest
Badhabit
День добрый! Мне нужно ускорить импорт данных в MS SQL.
Ситуация следующая: у меня есть большие xml файлы (размером около 1ТБ) я их самописным парсером (написан на С++) разбираю и заливаю просто в .csv-файлы или в БД MS SQL через IRowsetFastLoad (OLE DB).
Так вот если лить просто в csv файлы скорость ограничена только скорость HDD т.е. получается примерно 7-9 ГБ в минуту, а если же заливать в БД то скорость падает примерно в 2 раза и максимум достигает 3.7-4.2 ГБ в минуту. (заливаю в БД с включенным TabLock).
Подскажите можно ли как-нибудь ускорить импорт в БД? Или все тщетно?


1. TabLock необходимое, но не достаточное условие для bulk load.
2. Если у вас НЕ bulk load - скорость 2 раза ниже скорости диска это предел.
1 ноя 17, 17:08    [20919691]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить импорт в БД  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33650
Блог
bulk кушает одно ядро,
разбейте вашу загрузку на много потоков - будет счастье, если нет других узких мест
1 ноя 17, 19:27    [20920037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить