Улучшит ли TABLOCK производительность BULK INSERT или нет? - PullRequest
0 голосов
/ 23 февраля 2020

Мне просто интересно, улучшит ли TABLOCK производительность BULK INSERT или нет?

Исходя из первого ответа в https://dba.stackexchange.com/questions/165966/how-does-one-investigate-the-performance-of-a-bulk-insert-statement, кажется, что TABLOCK будет.

На основании официального документа https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15 говорится: «Таблица может быть загружена одновременно несколькими клиентами, если в таблице нет индексов и указан TABLOCK». Но для моего случая только одна сессия должна массово вставить данные в базу данных, поэтому мне кажется, что мне вообще не нужно указывать TABLOCK.

Я задал этот вопрос на https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a957cd37-ec96-4beb-8a4b-03d783c7f91e/whether-tablock-will-improve-the-performance-of-bulk-insert-or-not?forum=transactsql но не получил удовлетворительного ответа, поэтому я должен опубликовать здесь вопрос.

Спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...