Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить перенос данных из одной БД в другую? / 25 сообщений из 33, страница 1 из 2
04.09.2019, 11:07
    #39857010
Satans Claws
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Есть задача: перенести некую таблицу из одной БД в другую.

На тестовом прогоне запрос
Код: sql
1.
2.
Insert Into База1.Таблица1 ([куча полей])
select [куча полей] from База2.Таблица1


сделал все, как полагается, но это заняло достаточно много времени.

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

Внимание вопрос:
Есть ли способ ускорить необходимый мне перенос данных за счет отключения логирования (или конструкция Insert Into уже является нелогируемой операцией и быстрее ничего не сделаешь?)

Поскольку в База1 Таблица1 пустая, я её могу даже грохнуть и сделать
Код: sql
1.
select [куча полей] into База1.Таблица1 from База2.Таблица1 


а потом создать нужный индекс.
Будет ли это быстрее?
...
Рейтинг: 0 / 0
04.09.2019, 11:12
    #39857013
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Попробуйте через Import Task.
...
Рейтинг: 0 / 0
04.09.2019, 11:15
    #39857019
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Satans ClawsПоскольку в База1 Таблица1 пустая, я её могу даже грохнуть и сделать
Код: sql
1.
select [куча полей] into База1.Таблица1 from База2.Таблица1 


а потом создать нужный индекс.
Будет ли это быстрее?
будет, если модель простая или bulk_logged
...
Рейтинг: 0 / 0
04.09.2019, 12:28
    #39857085
OBG
OBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
...
Рейтинг: 0 / 0
04.09.2019, 13:01
    #39857118
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGSatans Claws,
Заблокируйте таблицу (с помощью TABLOCK): https://docs.microsoft.com/ru-ru/sql/relational-databases/import-export/prerequisites-for-minimal-logging-in-bulk-import?view=sql-server-2017
и что?
1. если у него полная модель, то все равно полное логирование обеспечено
2. он написал, на таблице есть индекс.
вот тут правильная таблица: The Data Loading Performance Guide
сходите и убедитесь, что одного таблока точно не хватит,
как минимум нужен TF610,
но по личному опыту: и с флагом тоже при имеющемся индексе будет полное логирование
...
Рейтинг: 0 / 0
04.09.2019, 15:50
    #39857286
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Yasha123вот тут правильная таблица: The Data Loading Performance Guide


Там показания сильно несогласованы.

Additionally, a bulk load operation will be minimally logged even without the trace flag when both of the following conditions are true:
•A WITH (TABLOCK) hint is specified on the target table
•The target table is empty
...
Рейтинг: 0 / 0
04.09.2019, 15:57
    #39857295
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
aleks222Yasha123вот тут правильная таблица: The Data Loading Performance Guide


Там показания сильно несогласованы.

Additionally, a bulk load operation will be minimally logged even without the trace flag when both of the following conditions are true:
•A WITH (TABLOCK) hint is specified on the target table
•The target table is empty
что не так-то?
...
Рейтинг: 0 / 0
04.09.2019, 16:05
    #39857304
OBG
OBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Вот тут http://www.t-sql.ru/post/min_logged_with_full_recovery.aspx есть пример, разница во времени выполнения запросов с TABLOCK и без составляет 25% в базе данных с режимом восстановления FULL.
У меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):
Код: sql
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 4110 ms,  elapsed time = 8804 ms.

 SQL Server Execution Times:
   CPU time = 9641 ms,  elapsed time = 33096 ms.
...
Рейтинг: 0 / 0
04.09.2019, 16:13
    #39857315
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGВот тут http://www.t-sql.ru/post/min_logged_with_full_recovery.aspx есть пример, разница во времени выполнения запросов с TABLOCK и без составляет 25% в базе данных с режимом восстановления FULL.
У меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):
Код: sql
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 4110 ms,  elapsed time = 8804 ms.

 SQL Server Execution Times:
   CPU time = 9641 ms,  elapsed time = 33096 ms.


чукча не читатель?
у ТС на таблице индекс.
а в этом примере нет.
ну навесьте индекс и заново проверьте
...
Рейтинг: 0 / 0
04.09.2019, 16:16
    #39857317
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGВот тут http://www.t-sql.ru/post/min_logged_with_full_recovery.aspx есть пример, разница во времени выполнения запросов с TABLOCK и без составляет 25% в базе данных с режимом восстановления FULL.
У меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):
Код: sql
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 4110 ms,  elapsed time = 8804 ms.

 SQL Server Execution Times:
   CPU time = 9641 ms,  elapsed time = 33096 ms.


да и ваша "полная модель" вызывает сомнения.
база тестовая?
бэкап делали?
липой попахивает
...
Рейтинг: 0 / 0
04.09.2019, 16:38
    #39857330
OBG
OBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Yasha123OBGВот тут http://www.t-sql.ru/post/min_logged_with_full_recovery.aspx есть пример, разница во времени выполнения запросов с TABLOCK и без составляет 25% в базе данных с режимом восстановления FULL.
У меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):
Код: sql
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 4110 ms,  elapsed time = 8804 ms.

 SQL Server Execution Times:
   CPU time = 9641 ms,  elapsed time = 33096 ms.


чукча не читатель?


Это вы про себя?

Код: sql
1.
2.
3.
у ТС на таблице индекс.
а в этом примере нет.
ну навесьте индекс и заново проверьте



ТС пишет, что может удалить не только индекс, но и таблицу:
Код: sql
1.
2.
3.
4.
Поскольку в База1 Таблица1 пустая, я её могу даже грохнуть и сделать 
select [куча полей] into База1.Таблица1 from База2.Таблица1 

а потом создать нужный индекс.
...
Рейтинг: 0 / 0
04.09.2019, 16:39
    #39857333
OBG
OBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Yasha123OBGВот тут http://www.t-sql.ru/post/min_logged_with_full_recovery.aspx есть пример, разница во времени выполнения запросов с TABLOCK и без составляет 25% в базе данных с режимом восстановления FULL.
У меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):
Код: sql
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 4110 ms,  elapsed time = 8804 ms.

 SQL Server Execution Times:
   CPU time = 9641 ms,  elapsed time = 33096 ms.


да и ваша "полная модель" вызывает сомнения.
база тестовая?
бэкап делали?
липой попахивает

По ссылке тяжело перейти? Там все написано
...
Рейтинг: 0 / 0
04.09.2019, 16:44
    #39857338
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
авторУ меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):

ага, ещё лог урезать в минимум и вообще можно не нарадоваться
...
Рейтинг: 0 / 0
04.09.2019, 16:49
    #39857347
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGТС пишет, что может удалить не только индекс, но и таблицу:
Код: sql
1.
2.
3.
4.
Поскольку в База1 Таблица1 пустая, я её могу даже грохнуть и сделать 
select [куча полей] into База1.Таблица1 from База2.Таблица1 

а потом создать нужный индекс.


ТС-то пишет, а вы -- НЕТ.
вы ему советуете голый таблок.

вот вам репро с голым таблоком в присутствии индекса,
с таблицами из той самой ссылки,
которую типа мне надо открыть:
...
Рейтинг: 0 / 0
04.09.2019, 16:53
    #39857351
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
TaPaKавторУ меня в этом же примере разница составила почти 4 раза (предварительно увеличил базу до необходимого размера, данные в кэш загрузил):

ага, ещё лог урезать в минимум и вообще можно не нарадоваться
разница в 4 раза это простая модель в явном виде.
типа перевел базу в полную, бэкап сделать "забыл".
его в явном виде спрашиваешь про бэкап, а в ответ "сам чукча"
...
Рейтинг: 0 / 0
04.09.2019, 17:08
    #39857366
OBG
OBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Кластерный индекс по val varchar(255)?

Модератор: Божественное вложение от мастера скриншотов удалено.
...
Рейтинг: 0 / 0
04.09.2019, 17:17
    #39857380
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGКластерный индекс по val varchar(255)?

Модератор: Божественное вложение от мастера скриншотов удалено.
какой индекс?
...
Рейтинг: 0 / 0
04.09.2019, 17:27
    #39857388
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
OBGКластерный индекс по val varchar(255)?

Модератор: Божественное вложение от мастера скриншотов удалено.
не знаю, какой индекс был у оппонента,
мои индексы некластерные,
это ежику понятно,
ибо если неоговорено противное, индекс дефолтно создается некластерным:
BOLIf not otherwise specified, the default index type is NONCLUSTERED.
CREATE INDEX (Transact-SQL)
...
Рейтинг: 0 / 0
04.09.2019, 17:48
    #39857408
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
в целях завершения дебатов
+ специально для чукчи
повторяю ровно тот самый эксперимент,
что описан по ссылке (см. картинку), без индексов

как видим, никакой разницы в 4 раза нет.
есть те самые 25% экономии по времени,
о которых пишет Князев.

так что

1. привет тем, кто переводит в полную модель без полного бэкапа.
мои поздравления, база ни в какой не в полной модели, она в pseudo simple.
иначе не видать вам приращения скорости в 4 раза.

2. Князев же показал, что базу можно восстановить на произвольный момент времени.
так что никакого минимального логирования в полной модели нет и быть не может.

полная модель -- это такая модель,
при кототрой записи лога позволяют полностью восстановить операцию.
ну так ушедшее в лог при инсерте с таблоком содержит все данные,
потому и возможно восстановление.
это никакое не allocation page, allocation page,..., пустышки, которые только для роллбэка и нужны.

то, о чем тут речь, зовется efficiently logged operation.
когда не построчно записи в лог валятся, а страницы целиком со всем своим содержимым .
еще раз: не пустышки, а страницы целиком

P.S: то, что Князев там пишет про truncate table, извините, неверно,
это тоже полностью логируемая операция,
просто она тоже "эффективно" логируется:
Minimal Logging
RandalTRUNCATE TABLE is not a minimally-logged operation. It's logged exactly the same way in all recovery models. It's fully logged, but very efficiently logged, including using the deferred-drop mechanism.
...
Рейтинг: 0 / 0
04.09.2019, 18:01
    #39857414
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
ну и вот выхлоп из лога от последнего кода,
запущенного после бэкапа лога.
видно, что операций типа LOP_FORMAT_PAGE
в 14 раз меньше, чем LOP_INSERT_ROWS
(других операций в контексте кучи просто нет)
это потому, что на страницу влазят 14 записей вида int + varchar(255),
полностью забитыx 255 символами.

надеюсь, всем видно, что страницы ушли в лог вместо строк,
когда делался инсерт с таблоком.
...
Рейтинг: 0 / 0
04.09.2019, 21:14
    #39857518
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Многопоточно через SSIS в пустую и без индексов таблицу-приемник
...
Рейтинг: 0 / 0
05.09.2019, 04:40
    #39857662
Satans Claws
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Yasha123разница в 4 раза это простая модель в явном виде.
типа перевел базу в полную, бэкап сделать "забыл".


Сорри за оффтоп (я автор, мне можно :D ), но можно с этого момента подробнее?
Я правильно понимаю, что, поскольку в FULL-модели восстановления лог содержит информацию о всех транзакциях с момента последнего бэкапа - то пока бэкапа не будет, логу нет стартовой точки, чтоб начать хранить эту информацию (соответственно, в лог ничего не пишется).
Обратный переход (FULL -> SIMPLE) применяется сразу?
...
Рейтинг: 0 / 0
05.09.2019, 08:15
    #39857686
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Satans ClawsYasha123разница в 4 раза это простая модель в явном виде.
типа перевел базу в полную, бэкап сделать "забыл".


Сорри за оффтоп (я автор, мне можно :D ), но можно с этого момента подробнее?
Я правильно понимаю, что, поскольку в FULL-модели восстановления лог содержит информацию о всех транзакциях с момента последнего бэкапа - то пока бэкапа не будет, логу нет стартовой точки, чтоб начать хранить эту информацию (соответственно, в лог ничего не пишется).
Обратный переход (FULL -> SIMPLE) применяется сразу?Почти так, только проблема не в бекапе лога (в который попадает весь лог с предыдущего бекапа лога), а в его последующем восстановлении, которое не возможно без восстановления полного бекапа. И пока не сделан полный бекап, нет смысла и в полной моделе.
...
Рейтинг: 0 / 0
05.09.2019, 09:32
    #39857725
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
Yasha123efficiently logged operation
А не встречался ли вам какой-нибудь список условий, при которых включается "постраничное" логирование?
По какой-то неясно для меня причине, он не совпадает с условиями минимпльного логирование?
...
Рейтинг: 0 / 0
05.09.2019, 10:01
    #39857745
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить перенос данных из одной БД в другую?
msLexYasha123efficiently logged operation
А не встречался ли вам какой-нибудь список условий, при которых включается "постраничное" логирование?
По какой-то неясно для меня причине, он не совпадает с условиями минимпльного логирование?
мне не встречался,
но из соображений здравого смысла:

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

если вставка в кластерный с tablock и order by таблица пуста, все ровно то же самое,
мы валим точно в конец, т.е. пишем новые целые страницы подряд.
будет логироваться постранично.

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

т.е. на первый взгляд все те же условия, что и для минимального логирования в simple и bulk logged.
у вас есть примеры, когда не так?

думаю, еще есть ограничение на объем.
если строк мало, будет построчно в любой модели
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить перенос данных из одной БД в другую? / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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