Prerequisites for Minimal Logging in Bulk ImportPrerequisites for Minimal Logging in Bulk Import

Область применения: ДаSQL Server НетБаза данных SQL Azure НетAzure Synapse Analytics (Хранилище данных SQL) НетParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

В базе данных, использующей модель полного восстановления, все операции вставки строк, выполняющиеся при массовом импорте, полностью записываются в журнал транзакций.For a database under the full recovery model, all row-insert operations that are performed by bulk import are fully logged in the transaction log. Если используется модель полного восстановления, импорт большого количества данных может привести к быстрому заполнению журнала транзакций.Large data imports can cause the transaction log to fill rapidly if the full recovery model is used. При использовании простой модели восстановления или модели восстановления с неполным протоколированием минимальное протоколирование операций массового импорта, напротив, снижает вероятность того, что операция массового импорта заполнит все пространство журнала.In contrast, under the simple recovery model or bulk-logged recovery model, minimal logging of bulk-import operations reduces the possibility that a bulk-import operation will fill the log space. Минимальное протоколирование также более эффективно, чем полное.Minimal logging is also more efficient than full logging.

Примечание

Модель восстановления с неполным протоколированием предназначена для временной замены модели полного восстановления на период проведения массовых операций.The bulk-logged recovery model is designed to temporarily replace the full recovery model during large bulk operations.

Требования к таблицам для минимального протоколирования операций массового импортаTable Requirements for Minimally Logging Bulk-Import Operations

Минимальное протоколирование требует, чтобы целевая таблица удовлетворяла следующим условиям.Minimal logging requires that the target table meets the following conditions:

  • В данный момент таблица не реплицируется.The table is not being replicated.

  • Задана блокировка таблицы (с помощью TABLOCK).Table locking is specified (using TABLOCK).

    Примечание

    Хотя операции вставки данных при минимальном ведении журнала операций массового импорта не регистрируются в журнале транзакций, компонент Компонент Database EngineDatabase Engine по-прежнему ведет журнал выделения всех экстентов для таблицы.Although data insertions are not logged in the transaction log during a minimally logged bulk-import operation, the Компонент Database EngineDatabase Engine still logs extent allocations each time a new extent is allocated to the table.

  • Таблица не является оптимизированной для памяти.Table is not a memory-optimized table.

Можно ли использовать минимальное протоколирование, также зависит от того, индексируется ли таблица и, если это так, пуста ли она.Whether minimal logging can occur for a table also depends on whether the table is indexed and, if so, whether the table is empty:

  • Если у таблицы нет индексов, ведется минимальный журнал страниц данных.If the table has no indexes, data pages are minimally logged.

  • Если у таблицы нет кластеризованного индекса, но есть один или более некластеризованных индексов, всегда ведется минимальный журнал страниц данных.If the table has no clustered index but has one or more nonclustered indexes, data pages are always minimally logged. Однако применяемый способ ведения журнала страниц индекса зависит от того, пуста ли таблица.How index pages are logged, however, depends on whether the table is empty:

    • Если таблица пуста, ведется минимальный журнал страниц индекса.If the table is empty, index pages are minimally logged. Если начать с пустой таблицы и выполнить массовый импорт данных несколькими пакетами, для первого пакета будет вестись минимальный журнал страниц как данных, так и индекса, но, начиная со второго пакета, минимальный журнал будет вестись только для страниц данных.If you start with an empty table and bulk import the data in multiple batches, both index and data pages are minimally logged for the first batch, but beginning with the second batch, only data pages are minimally logged.

    • Если таблица не пуста, ведется полный журнал страниц индекса.If table is non-empty, index pages are fully logged.

  • Если у таблицы есть кластеризованный индекс, и он пуст, будет вестись минимальный журнал и страниц данных, и страниц индекса.If the table has a clustered index and is empty, both data and index pages are minimally logged. И наоборот, если у таблицы есть кластеризованный индекс на основе сбалансированного дерева и она не является пустой, будет вестись полный журнал и страниц данных, и страниц индекса независимо от модели восстановления.In contrast, if a table has a btree based clustered index and is non-empty, data pages and index pages are both fully logged regardless of the recovery model. Если начать с пустой таблицы rowstore и выполнить массовый импорт данных в нескольких пакетах, для первого пакета будет вестись минимальный журнал и страниц данных, и страниц индекса. Начиная со второго пакета, неполный журнал будет вестись только для страниц данных.If you start with an empty table rowstore table and bulk import the data in batches, both index and data pages are minimally logged for the first batch, but from the second batch onwards, only data pages are bulk logged.

  • Дополнительные сведения о ведении журнала для кластеризованного индекса columnstore см. в руководстве по загрузке данных индекса columnstore.For information about logging for a clustered columnstore index (CCI), see Columnstore index data loading guidance.

Примечание

Если включена репликация транзакций, операции BULK INSERT полностью протоколируются даже в модели с неполным протоколированием.When transactional replication is enabled, BULK INSERT operations are fully logged even under the Bulk Logged recovery model.

См. также:See Also

Модели восстановления (SQL Server) Recovery Models (SQL Server)
bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
BACKUP (Transact-SQL) BACKUP (Transact-SQL)
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Табличные указания (Transact-SQL) Table Hints (Transact-SQL)
INSERT (Transact-SQL)INSERT (Transact-SQL)