powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / INSERT WITH (TABLOCK)
16 сообщений из 16, страница 1 из 1
INSERT WITH (TABLOCK)
    #39909184
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, привет.
Прочитал на msdn что если делать insert с опцией tablock, то это ускоряет скорость вставки данных в таблицу за счет оптимизации ведения журнала транзакций.

Там речь идет о куче и из описания я не понял, ускоряет ли это вставку данных если таблица индексированная?

Код: sql
1.
2.
INSERT INTO TABLE_1 (ID,VAL) WITH (TABLOCK)
SELECT ID,VAL FROM TABLE_2
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909193
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk
Прочитал на msdn что если делать insert с опцией tablock, то это ускоряет скорость вставки данных в таблицу за счет оптимизации ведения журнала транзакций.

Там речь идет о куче и из описания я не понял, ускоряет ли это вставку данных если таблица индексированная?
Если есть индексы, то для использования минимального протоколирования нужно, что бы перед INSERT таблица была пустая

Если она непустая, но установлен флаг 610, то пишут, что минимальное протоколирование "возможно".

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/dd425070(v=sql.100)?redirectedfrom=MSDN
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909200
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
assmsk
Прочитал на msdn что если делать insert с опцией tablock, то это ускоряет скорость вставки данных в таблицу за счет оптимизации ведения журнала транзакций.

Там речь идет о куче и из описания я не понял, ускоряет ли это вставку данных если таблица индексированная?
Если есть индексы, то для использования минимального протоколирования нужно, что бы перед INSERT таблица была пустая

Если она непустая, но установлен флаг 610, то пишут, что минимальное протоколирование "возможно".

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/dd425070(v=sql.100)?redirectedfrom=MSDN



Те правильно я понимаю, что если я буду вставлять данные в пустую индексированную таблицу циклом с опцией tablock, то получу прирост в производительности только в 1ой итерации цикла, а со 2ой будет так же как и без tablock?
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909208
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk
Те правильно я понимаю, что если я буду вставлять данные в пустую индексированную таблицу циклом с опцией tablock, то получу прирост в производительности только в 1ой итерации цикла, а со 2ой будет так же как и без tablock?
Да.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909218
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

если нет явных проблем с записью в журнал, например, мало памяти, медленные диски, то на глаз разницу не заметите. WITH (TABLOCK) даст выигрыш в объеме записи в журнал любом случае, даже если нет минимального протоколирования.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909259
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия SQL Server'a какая? Начиная с 2016 сервер умеет делать parallel insert при указании TABLOCK
https://www.sqlshack.com/use-parallel-insert-sql-server-2016-improve-query-performance/
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909387
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk
Всем, привет.
Прочитал на msdn что если делать insert с опцией tablock, то это ускоряет скорость вставки данных в таблицу за счет оптимизации ведения журнала транзакций.

Там речь идет о куче и из описания я не понял, ускоряет ли это вставку данных если таблица индексированная?

Код: sql
1.
2.
INSERT INTO TABLE_1 (ID,VAL) WITH (TABLOCK)
SELECT ID,VAL FROM TABLE_2



Если таблица имеет кластерный индекс, то есть смысл отсортировать вставляемые данные в порядке этого ключа. В дополнение к TABLOCK
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909392
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Если таблица имеет кластерный индекс, то есть смысл отсортировать вставляемые данные в порядке этого ключа.
Сиквел не так глуп и делает это самостоятельно.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909494
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пора открывать раздел мифы & городские легенды SQL

Всех с наступающим!
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909562
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортировка в некоторых случаях требуется для выполнения условий минимального протоколирования.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909767
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
assmsk
Прочитал на msdn что если делать insert с опцией tablock, то это ускоряет скорость вставки данных в таблицу за счет оптимизации ведения журнала транзакций.

Там речь идет о куче и из описания я не понял, ускоряет ли это вставку данных если таблица индексированная?
Если есть индексы, то для использования минимального протоколирования нужно, что бы перед INSERT таблица была пустая

Если она непустая, но установлен флаг 610, то пишут, что минимальное протоколирование "возможно".

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/dd425070(v=sql.100)?redirectedfrom=MSDN



Те правильно я понимаю, что если я буду вставлять данные в пустую индексированную таблицу циклом с опцией tablock, то получу прирост в производительности только в 1ой итерации цикла, а со 2ой будет так же как и без tablock?
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909809
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk
alexeyvg
пропущено...
Если есть индексы, то для использования минимального протоколирования нужно, что бы перед INSERT таблица была пустая

Если она непустая, но установлен флаг 610, то пишут, что минимальное протоколирование "возможно".

https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008/dd425070(v=sql.100)?redirectedfrom=MSDN

Те правильно я понимаю, что если я буду вставлять данные в пустую индексированную таблицу циклом с опцией tablock, то получу прирост в производительности только в 1ой итерации цикла, а со 2ой будет так же как и без tablock?
Да, я же уже ответил "да" на этот вопрос :-)
alexeyvg
assmsk
Те правильно я понимаю, что если я буду вставлять данные в пустую индексированную таблицу циклом с опцией tablock, то получу прирост в производительности только в 1ой итерации цикла, а со 2ой будет так же как и без tablock?
Да.


Но, заметьте, что есть флаг 610, который позволит минимально логировать и в следующих итерациях.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909823
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Флаг 610 является устаревшим с 2014 или 2016 версии, точно не помню.
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909844
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
случайно продублировал)
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909848
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Флаг 610 является устаревшим с 2014 или 2016 версии, точно не помню.
Спасибо, не знал про это.

https://docs.microsoft.com/ru-ru/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-ver15
Документация610 Управляет вставками с минимальным протоколированием в индексированные таблицы.
Этот флаг трассировки необязателен начиная с версии SQL Server 2016, поскольку минимальное протоколирование для индексированных таблиц включено по умолчанию.
В SQL Server 2016, когда операция массовой загрузки вызывает выделение новой страницы, все строки, последовательно заполняющие эту новую страницу, имеют минимальное протоколирование, если выполняются остальные необходимые условия для минимального протоколирования. Строки, вставляемые в существующие страницы (без выделения новой страницы) для сохранения порядка индексов, по-прежнему протоколируются полностью, как и строки, перемещенные в результате разбиения страницы во время загрузки.
Параметр ALLOW_PAGE_LOCKS должен иметь значение ON для индексов (указано по умолчанию), чтобы операция минимального протоколирования выполнялась, поскольку при выделении устанавливаются блокировки страниц, и протоколируются только выделения страниц или экстентов.

assmsk,
Значит, нужно руководствоваться этой таблицей:
...
Рейтинг: 0 / 0
INSERT WITH (TABLOCK)
    #39909850
u.eMeHTuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
Флаг 610 является устаревшим с 2014 или 2016 версии, точно не помню.


С 2016
https://blogs.msdn.microsoft.com/sql_server_team/sql-server-2016-minimal-logging-and-impact-of-the-batchsize-in-bulk-load-operations/

интересная статья с тестами для более ранних версий:

https://orderbyselectnull.com/2017/07/10/trace-flag-610-and-sql-server-2016/
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / INSERT WITH (TABLOCK)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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