Транзакции в таблицах хранилища в Microsoft Fabric
Применимо к: Конечная точка и хранилище SQL в Microsoft Fabric
Как и в SQL Server, транзакции позволяют управлять фиксацией или откатом запросов на чтение и запись.
Вы можете изменить данные, хранящиеся в таблицах в хранилище, с помощью транзакций для группировки изменений.
- Например, можно зафиксировать вставки в кратные таблицы или ни одну из таблиц, если возникает ошибка. Если вы изменяете сведения о заказе на покупку, затрагивающие три таблицы, эти изменения можно сгруппировать в одну транзакцию. Это означает, что при запросе к этим таблицам все они либо имеют изменения, либо ни одна из них не выполняет. Транзакции — это распространенная практика, когда необходимо обеспечить согласованность данных в нескольких таблицах.
Важно!
Microsoft Fabric в настоящее время находится на этапе предварительной версии. Эти сведения относятся к предварительной версии продукта, который может быть существенно изменен перед выпуском. Корпорация Майкрософт не дает никаких гарантий, явных или подразумеваемых, в отношении предоставленной здесь информации.
Возможности транзакций
Те же возможности транзакций поддерживаются в конечной точке SQL в Microsoft Fabric, но для запросов только для чтения.
Транзакции также можно использовать для последовательных инструкций SELECT, чтобы убедиться, что все используемые таблицы имеют данные за один и тот же момент времени. Например, если в таблице есть новые строки, добавленные другой транзакцией, новые строки не влияют на запросы SELECT в открытой транзакции.
Важно!
В Microsoft Fabric поддерживается только уровень изоляции snapshot. Если вы используете T-SQL для изменения уровня изоляции, это изменение игнорируется во время выполнения запроса и применяется snapshot изоляция.
Поддержка транзакций запросов между базами данных
Хранилище в Microsoft Fabric поддерживает транзакции, охватывающие базы данных, находящиеся в одной рабочей области, включая чтение из конечной точки SQL Lakehouse. У каждого Lakehouse есть одна конечная точка SQL, а в каждой рабочей области может быть несколько lakehouse.
Поддержка DDL в транзакциях
Хранилище в Microsoft Fabric поддерживает DDL, например CREATE TABLE, внутри определяемых пользователем транзакций.
Блокировки для различных типов операторов
Эта таблица содержит список блокировок, используемых для различных типов транзакций. Все блокировки находятся на уровне таблицы:
Тип инструкции | Блокировка снята |
---|---|
SELECT | Schema-Stability (Sch-S) |
INSERT | Намерение Монопольное (IX) |
DELETE | Намерение Монопольное (IX) |
UPDATE | Намерение Монопольное (IX) |
COPY INTO; | Намерение Монопольное (IX) |
DDL | Schema-Modification (Sch-M) |
Эти блокировки предотвращают конфликты, такие как изменение схемы таблицы при обновлении строк в транзакции.
Вы можете запрашивать блокировки, удерживаемые в настоящее время, с помощью динамического административного представления (DMV) sys.dm_tran_locks.
Конфликты из двух или более параллельных транзакций, которые обновляют одну или несколько строк в таблице, оцениваются в конце транзакции. Первая транзакция для фиксации завершается успешно, а другие транзакции откатываются с возвращенной ошибкой. Эти конфликты оцениваются на уровне таблицы, а не на уровне отдельных файлов Parquet.
Инструкции INSERT всегда создают новые файлы Parquet, что означает меньше конфликтов с другими транзакциями, за исключением DDL, так как схема таблицы может изменяться.
Ведение журнала транзакций
Ведение журнала транзакций в хранилище в Microsoft Fabric выполняется на уровне файлов Parquet, так как файлы Parquet являются неизменяемыми (их нельзя изменить). Откат приводит к тому, что вы указываете назад на предыдущие файлы Parquet. Преимущества этого изменения заключаются в том, что ведение журнала транзакций и откат выполняется быстрее.
Ограничения
- Распределенные транзакции не поддерживаются.
- Точки сохранения не поддерживаются.
- Именованные транзакции не поддерживаются.
- Помеченные транзакции не поддерживаются.
- В настоящее время в хранилище существует ограниченная функциональность T-SQL. Список команд T-SQL, которые в настоящее время недоступны, см. в разделе Область действия TSQL .
- Если транзакция вставляет данные в пустую таблицу и выдает select перед откатом, автоматически созданная статистика может по-прежнему отражать незафиксированные данные, что приводит к неточной статистике. Неточная статистика может привести к неоптимизации планов запросов и времени выполнения. При откате транзакции с помощью SELECT после большого значения INSERT может потребоваться обновить статистику для столбцов, упомянутых в select.