|
|
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Есть таблица с 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2002, 11:15:53 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Я сталкивался с подобной проблемой. Я тоже заметил, что закачка данных из процедуры в разы медленнее чем через клиента. Путем мониторинга я отследил, что закачка через ADO в разы быстрее, но при этом отжирается оперативная память пропорционально количеству закаченных данных. После остановки процесса закачивания память также потихоньку начинает возвращаться. Это навело меня на мысль, что сервер кэширует данные, полученные от клиента, а потом уже записывает их физически. Но при выдергивании сервера из розетки в самый разгар закачки и перезагрузки все данные оказались на месте. Вывод: Быстрее всего данные закачиваются через клиента, но необходимо иметь достаточный объем оперативной памяти, либо закачивать пачками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 02:11:32 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Насколько я помню то bulk insert выполняется без записи в лог если нет в таблице индексов или если они имеются, но таблица пуста. (Если я не прав то поправьте). А вы пишете что у вас имеются 3 индекса. Так вот вероятно что сперва вы заливали bulkinsert'ом и все было нормально потому что таблица была пуста, затем когда запускаете повторно (продолжаете) заливку то таблица не пуста и соответственно скорость гораздо ниже. Я когда закачиваю большой объем данных я всегда удаляю индексы. Заливаю затем заново создаю индексы это быстрее работает нежели при имеющихся индексах толкать в таблицу данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 09:52:02 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
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 Да действительно память не подвела таблица должна быть пустой или не иметь индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 09:56:55 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Дело в том, что с таблицей при заливке будут работать. и данные заливаются от 1-ой до 150000 все время. Создать отдельную буферную таблицу без индэксов? Но данных на таблицу будет 300.000.000 за 10 дней. (всего 22 таблицы в разных базах) И гонять данные туда-сюда - долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 13:30:17 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Не понял по понятнее не можете объяснить что вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 13:39:21 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
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). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 14:17:45 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
Я сам тоже не мастер объяснять, но я так и не понял? Вам нужно закачивать данные и при этом что бы еще и работали юзеры? Более детально опишете что вы имеете (какие данные? у вас они или к вам они частями попадают?) что надо сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2002, 14:55:55 |
|
||
|
BULK INSERT
|
|||
|---|---|---|---|
|
#18+
>ам нужно закачивать данные и при этом что бы еще и >аботали юзеры? ДА >Более детально опишете что вы имеете (какие данные? у >вас они или к вам они частями попадают?) что надо >сделать 22 базы в каждой данные за 10 дней (что-б бэкапить проще) данные приходят в бинарном виде. попадают к нам частями. от 1 до 300000 записей. пара строчек, дата и с десяток интов. надо их обработать и загрузить (30 милионов за ~15 часов). после обработки, текстовый файл, который и загружается из процедуры. Процедура вызывается из метода компонентьа, который в свою очередб вызывается (ADO) из службы. Но это уже другое :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2002, 09:50:27 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32033583&tid=1822198]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 319ms |

| 0 / 0 |
