powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BULK INSERT
9 сообщений из 9, страница 1 из 1
BULK INSERT
    #32033450
Фотография matveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица с 3 индексами.
В нее загружаются данные из файлов.
(в среднем загрузка 400 записей в секунду)
запрос с BULK INSERTом формируется динамически
и выполняется EXECUTE(@lalala) (в процедуре).
(BULK INSERT dbname FROM 'file')
Пока записей мало (лимонов 20) все более менее работает.
за минуту тысяч 120.
А надо - 300 милионов залить в течении < 10 дней.

Если я выполняю EXECUTE(@lalala) из Query Analizerа
то льётся примерно 150 записей в секунду.
А если такой-же @lalala из процедуры - то раза в 3-4 медленнее.
Почему?
Как ускорить?

PS: каждая запись - около 170 байт в SQL.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033566
lmatveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сталкивался с подобной проблемой. Я тоже заметил, что закачка данных из процедуры в разы медленнее чем через клиента. Путем мониторинга я отследил, что закачка через ADO в разы быстрее, но при этом отжирается оперативная память пропорционально количеству закаченных данных. После остановки процесса закачивания память также потихоньку начинает возвращаться. Это навело меня на мысль, что сервер кэширует данные, полученные от клиента, а потом уже записывает их физически. Но при выдергивании сервера из розетки в самый разгар закачки и перезагрузки все данные оказались на месте.
Вывод: Быстрее всего данные закачиваются через клиента, но необходимо иметь достаточный объем оперативной памяти, либо закачивать пачками.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033582
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я помню то bulk insert выполняется без записи в лог если нет в таблице индексов или если они имеются, но таблица пуста. (Если я не прав то поправьте). А вы пишете что у вас имеются 3 индекса. Так вот вероятно что сперва вы заливали bulkinsert'ом и все было нормально потому что таблица была пуста, затем когда запускаете повторно (продолжаете) заливку то таблица не пуста и соответственно скорость гораздо ниже. Я когда закачиваю большой объем данных я всегда удаляю индексы. Заливаю затем заново создаю индексы это быстрее работает нежели при имеющихся индексах толкать в таблицу данные.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033583
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Logged and Nonlogged Bulk Copies
Microsoft® SQL Server™ bulk copies that import data into SQL Server are run in either logged or nonlogged mode. The difference between logged and nonlogged bulk copy operations is how much information is logged. Both logged and nonlogged bulk copy operations can be rolled back, but only a logged bulk copy operation can be rolled forward.

In a logged bulk copy all row insertions are logged, which can generate many log records in a large bulk copy operation. These log records can be used to both roll forward and roll back the logged bulk copy operation. In a nonlogged bulk copy, only the allocations of new pages to hold the bulk copied rows are logged. This significantly reduces the amount of logging that is needed and speeds the bulk copy operation. If a nonlogged bulk copy operation encounters an error and has to be rolled back, the allocation log records are used to deallocate the pages holding the bulk copied rows. Since the individual row insertions are not logged in a nonlogged bulk copy, however, there is no log record of the individual rows that could be used to roll forward nonlogged bulk copy operations. This is why a nonlogged bulk copy operation invalidates a log backup sequence.

If the database option trunc. log on chkpt. is set on, then there is no need to generate log records that would support rolling forward a bulk copy operation. Use nonlogged bulk copy operations in databases where trunc. log on chkpt. is turned on.

Whether a bulk copy is logged or nonlogged is not specified as part of the bulk copy operation; it is dependent on the state of the database and the table involved in the bulk copy. A nonlogged bulk copy occurs if all the following conditions are met:

The database option select into/bulkcopy is set to true.
The target table has no indexes, or if the table has indexes, it is empty when the bulk copy starts.
The target table is not being replicated.
The TABLOCK hint is specified using bcp_control with eOption set to BCPHINTS.
Any bulk copy into SQL Server that does not meet these conditions is logged.

See Also
Logged and Nonlogged Bulk Copy Operations

Да действительно память не подвела таблица должна быть пустой или не иметь индексов.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033615
Фотография matveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что с таблицей при заливке будут работать.
и данные заливаются от 1-ой до 150000 все время.
Создать отдельную буферную таблицу без индэксов?
Но данных на таблицу будет 300.000.000 за 10 дней.
(всего 22 таблицы в разных базах)
И гонять данные туда-сюда - долго.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033616
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял по понятнее не можете объяснить что вам нужно.
...
Рейтинг: 0 / 0
BULK INSERT
    #32033624
Фотография matveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The database option select into/bulkcopy is set to true.
Есть такое
The target table has no indexes, or if the table has indexes, it is empty when the bulk copy starts.
У меня с индексами. С ней одновременно работать можно.
The target table is not being replicated.
The TABLOCK hint is specified using bcp_control with eOption set to BCPHINTS.
Таблок не используем.

Данные располагаются в таблицах (22 штуки).
В каждую таблицу за 10 дней - 300 лимонов.
каждая таблица находится в отдельной бызе
(recovery into/bulkcopy).
...
Рейтинг: 0 / 0
BULK INSERT
    #32033633
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сам тоже не мастер объяснять, но я так и не понял?
Вам нужно закачивать данные и при этом что бы еще и работали юзеры? Более детально опишете что вы имеете (какие данные? у вас они или к вам они частями попадают?) что надо сделать
...
Рейтинг: 0 / 0
BULK INSERT
    #32033752
Фотография matveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ам нужно закачивать данные и при этом что бы еще и >аботали юзеры?
ДА
>Более детально опишете что вы имеете (какие данные? у >вас они или к вам они частями попадают?) что надо >сделать
22 базы в каждой данные за 10 дней
(что-б бэкапить проще)
данные приходят в бинарном виде.
попадают к нам частями.
от 1 до 300000 записей.
пара строчек, дата и с десяток интов.
надо их обработать и загрузить (30 милионов за ~15 часов).
после обработки, текстовый файл, который и загружается из процедуры.
Процедура вызывается из метода компонентьа, который в свою очередб вызывается (ADO) из службы. Но это уже другое :-)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / BULK INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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