powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Быстрая вставка данных
17 сообщений из 17, страница 1 из 1
Быстрая вставка данных
    #39662195
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSSQL 2008 R2 (10.50.6000)
БД Recovery model: Simple
Есть хранимая процедура, в которой обрабатываются данные, которые заносятся в подготовленную временную таблицу (несколько миллионов записей):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table #small
(
	 [id] int identity(1,1)
	,[ID1] int not null
	,[ID2] int not null
	,[Type] tinyint not null
	,[Count] int not null
)


Кроме того, есть большая таблица [big] аналогичной структуры, в которой есть кластерный индекс по полю [id]. Больше никаких индексов нет.

Делаю вставку стандартно:
Код: sql
1.
2.
insert into [big]([ID1],[ID2],[Type],[Count])
	select [ID1],[ID2],[Type],[Count] from #small



Работает приемлемо, но хочется быстрее.

Как можно сделать?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662209
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убрать как минимум свойство identity(1,1) как минимум.
Что по вашему быстро и какие сейчас проблемы?
Может у вас просто проблемы с вводом\выводом, которое все тормозит
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662213
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=Работает приемлемо, но хочется быстрее.Что хочется быстрее, вставку в временную, или в большую таблицу?
Если второе, попробуйте вставку с минимальным логированием
Код: sql
1.
2.
insert into [big]([ID1],[ID2],[Type],[Count]) WITH (TABLOCK)
	select [ID1],[ID2],[Type],[Count] from #small
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662249
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg=Сергей=Работает приемлемо, но хочется быстрее.Что хочется быстрее, вставку в временную, или в большую таблицу?
Если второе, попробуйте вставку с минимальным логированием
Код: sql
1.
2.
insert into [big]([ID1],[ID2],[Type],[Count]) WITH (TABLOCK)
	select [ID1],[ID2],[Type],[Count] from #small




А где тут минимальное логирование?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662250
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg=Сергей=Работает приемлемо, но хочется быстрее.Что хочется быстрее, вставку в временную, или в большую таблицу?
Если второе, попробуйте вставку с минимальным логированием
Код: sql
1.
2.
insert into [big]([ID1],[ID2],[Type],[Count]) WITH (TABLOCK)
	select [ID1],[ID2],[Type],[Count] from #small



Здесь только максимальное блокирование есть.
Совет то вредный...
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662251
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

вы перед своими ответами хоть с документацией сверяйтесь, что ли...

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017 Рекомендации по массовому импорту данных
Использование инструкции INSERT INTO…SELECT для массового импорта данных с минимальным протоколированием
Инструкция INSERT INTO <target_table> SELECT <columns> FROM <source_table> может эффективно перенести большое количество строк из одной таблицы (например, промежуточной) в другую таблицу с минимальным протоколированием. Минимальное протоколирование может повысить производительность выполнения инструкции и снизить вероятность того, что во время операции будет заполнен весь журнал транзакций.

Для минимального протоколирования этой инструкции необходимо выполнение следующих требований.

Модель восстановления базы данных настроена на простое или неполное протоколирование.

Целевой таблицей является пустая или непустая куча.

Целевая таблица не используется в репликации.

Для целевой таблицы указана подсказка TABLOCK.

Для строк, которые вставляются в кучу в результате действия вставки в инструкции MERGE, также может применяться минимальное протоколирование.

В отличие от инструкции BULK INSERT, которая удерживает менее строгую блокировку массового обновления, инструкция INSERT INTO…SELECT с указанием TABLOCK удерживает монопольную блокировку (X) таблицы. Это означает, что отсутствует возможность вставки строк с помощью параллельных операций вставки.
TABLOCK - одно из обязательных требований.... Другое дело, что ТС упоминает о том, что целевая таблицы - с кластерным индексом. А "быстрая" вставка работает только в "кучу"...
Ну и про модель восстановления ТС ничего не говорил... А требуется, как минимум, "неполное протоколирование".
Но это -0 другая история и к таблоку оно не имеет никакого отношения...
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662252
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаMasterZiv,

вы перед своими ответами хоть с документацией сверяйтесь, что ли...

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017 Рекомендации по массовому импорту данных
Использование инструкции INSERT INTO…SELECT для массового импорта данных с минимальным протоколированием
Инструкция INSERT INTO <target_table> SELECT <columns> FROM <source_table> может эффективно перенести большое количество строк из одной таблицы (например, промежуточной) в другую таблицу с минимальным протоколированием. Минимальное протоколирование может повысить производительность выполнения инструкции и снизить вероятность того, что во время операции будет заполнен весь журнал транзакций.

Для минимального протоколирования этой инструкции необходимо выполнение следующих требований.

Модель восстановления базы данных настроена на простое или неполное протоколирование.

Целевой таблицей является пустая или непустая куча.

Целевая таблица не используется в репликации.

Для целевой таблицы указана подсказка TABLOCK.

Для строк, которые вставляются в кучу в результате действия вставки в инструкции MERGE, также может применяться минимальное протоколирование.

В отличие от инструкции BULK INSERT, которая удерживает менее строгую блокировку массового обновления, инструкция INSERT INTO…SELECT с указанием TABLOCK удерживает монопольную блокировку (X) таблицы. Это означает, что отсутствует возможность вставки строк с помощью параллельных операций вставки.
TABLOCK - одно из обязательных требований.... Другое дело, что ТС упоминает о том, что целевая таблицы - с кластерным индексом. А "быстрая" вставка работает только в "кучу"...
Ну и про модель восстановления ТС ничего не говорил... А требуется, как минимум, "неполное протоколирование".
Но это -0 другая история и к таблоку оно не имеет никакого отношения..."Слона-то я и не заметил..."(с)
Модель же симпл . Значит, единственное оставшееся ограничение - наличие кластерного индекса на целевой таблице...
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662301
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662320
=Сергей=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, большое спасибо за ответы.

Извините, не указал существенной информации, дополню свой пост:
информация в таблицу [big] загружается одновременно из нескольких (3-7) подключений (job).

Тогда, если я правильно понимаю, использование хинта TABLOCK будет накладывать блокировку на вставку из остальных подключений?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662322
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=Тогда, если я правильно понимаю, использование хинта TABLOCK будет накладывать блокировку на вставку из остальных подключений?Предложенную статью читать лень?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662436
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Сергей=Друзья, большое спасибо за ответы.

Извините, не указал существенной информации, дополню свой пост:
информация в таблицу [big] загружается одновременно из нескольких (3-7) подключений (job).

Тогда, если я правильно понимаю, использование хинта TABLOCK будет накладывать блокировку на вставку из остальных подключений?Да, т.к. у вас есть кластерный инедкс.
Но тут надо смотреть, может, один поток с минимальным логированием может быть быстрее, чем много потоков без него.
Ещё важно, что бы не использовалось сжатие.
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662462
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДа, т.к. у вас есть кластерный инедкс.Тоже решили не читать статью?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662558
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmalexeyvgДа, т.к. у вас есть кластерный инедкс.Тоже решили не читать статью?Эээ, читал, там для кластерного индекса написано "неконкурентный доступ", разве это не означает ответа на вопрос "Да, т.к. у вас есть кластерный инедкс."?
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662569
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЭээ, читал, там для кластерного индекса написано "неконкурентный доступ"С TABLOCK да. А без и с TF 610 - конкурентный.
Или вы сугубо по TABLOCK отвечали? Тогда я Вас недопонял.
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662583
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmС TABLOCK да. А без и с TF 610 - конкурентный
Но все флаги, как обычно, используйте на свой страх и риск:
If trace flag 610 causes minimal logging to occur, you should generally see a performance improvement. But as always with trace flags, make sure you test for your specific environment and workload.
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662636
Col
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EleanorНо все флаги, как обычно, используйте на свой страх и риск:

Нет болл 610-го, почил в бозе.
В 2016-ом логика минимального логирования вклчена прямо из коробки.
...
Рейтинг: 0 / 0
Быстрая вставка данных
    #39662654
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Col,

Спасибо, нашла таблицу для минимального логирования в 2016.
Хотя, ТС-у придется тестировать TF610 со своим 2008 R2.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Быстрая вставка данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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