Транзакции в таблицах хранилища в Microsoft Fabric

Область применения: конечная точка аналитики SQL и хранилище в Microsoft Fabric

Аналогично их поведению в SQL Server транзакции позволяют управлять фиксацией или откатом запросов на чтение и запись.

Вы можете изменить данные, хранящиеся в таблицах в хранилище, с помощью транзакций для объединения изменений.

  • Например, можно зафиксировать вставку в несколько таблиц или ни одну из таблиц, если возникает ошибка. Если вы изменяете сведения о заказе на покупку, затрагивающем три таблицы, можно сгруппировать эти изменения в одну транзакцию. Это означает, что при запросе этих таблиц все они имеют изменения или нет. Транзакции являются распространенной практикой, когда необходимо убедиться, что данные согласованы в нескольких таблицах.

Возможности транзакций

Те же возможности транзакций поддерживаются в конечной точке аналитики SQL в Microsoft Fabric, но для запросов только для чтения.

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

Важно!

В Microsoft Fabric поддерживается только уровень изоляции моментальных снимков. Если вы используете T-SQL для изменения уровня изоляции, изменение игнорируется во время выполнения запроса и применяется изоляция моментальных снимков.

Поддержка транзакций запросов между базами данных

Хранилище в Microsoft Fabric поддерживает транзакции, охватывающие базы данных, находящиеся в одной рабочей области, включая чтение из конечной точки аналитики SQL в Lakehouse. Каждый Lakehouse имеет одну конечную точку аналитики SQL только для чтения. Каждая рабочая область может иметь несколько озерных домов.

Поддержка DDL в транзакциях

Хранилище в Microsoft Fabric поддерживает DDL, например CREATE TABLE внутри определяемых пользователем транзакций.

Блокировки для различных типов инструкций

В этой таблице представлен список того, какие блокировки используются для различных типов транзакций, все блокировки находятся на уровне таблицы:

Тип оператора Блокировка взята
SELECT Schema-Stability (Sch-S)
INSERT Исключаемая намерение (IX)
DELETE Исключаемая намерение (IX)
UPDATE Исключаемая намерение (IX)
COPY INTO; Исключаемая намерение (IX)
DDL Изменение схемы (Sch-M)

Эти блокировки препятствуют изменению таких конфликтов, как схема таблицы при обновлении строк в транзакции.

В настоящее время блокировки можно запрашивать с помощью динамического административного представления (DMV) sys.dm_tran_locks.

Конфликты из двух или нескольких параллельных транзакций, которые обновляют одну или несколько строк в таблице, оцениваются в конце транзакции. Первая транзакция для фиксации успешно завершается, а другие транзакции откатываются с возвращенной ошибкой. Эти конфликты оцениваются на уровне таблицы, а не на уровне отдельных файлов parquet.

Инструкции INSERT всегда создают новые файлы parquet, что означает меньше конфликтов с другими транзакциями, за исключением DDL, так как схема таблицы может быть изменена.

Ведение журнала транзакций

Ведение журнала транзакций в хранилище в Microsoft Fabric находится на уровне файла parquet, так как файлы parquet неизменяемы (их нельзя изменить). Откат приводит к откату, указывая на предыдущие файлы parquet. Преимущества этого изменения заключаются в том, что ведение журнала транзакций и откаты ускоряются.

Ограничения

  • Распределенные транзакции не поддерживаются.
  • Точки сохранения не поддерживаются.
  • Именованные транзакции не поддерживаются.
  • Помеченные транзакции не поддерживаются.
  • ALTER TABLE не поддерживается в явной транзакции.
  • В настоящее время в хранилище есть ограниченные функциональные возможности T-SQL. Список команд T-SQL, недоступных в настоящее время, см . в области поверхности TSQL.
  • Если транзакция содержит вставку данных в пустую таблицу и выдает команду SELECT перед откатом, автоматически созданная статистика по-прежнему может отражать незафиксированные данные, вызывая неточные статистические данные. Неточная статистика может привести к неоптимизированным планам запросов и времени выполнения. Если вы откатите транзакцию с помощью SELECTs после большой вставки, обновите статистику столбцов, упоминание в списке SELECT.