Транзакции в таблицах хранилища в 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.