Microsoft Fabric の Warehouse テーブル内のトランザクション
適用対象: Microsoft Fabric の SQL 分析エンドポイントおよびウェアハウス
SQL Server での動作と同様に、トランザクションを使用すると、読み取りと書き込みのクエリのコミットまたはロールバックを制御できます。
トランザクションを使用して変更をグループ化することで、Warehouse 内のテーブルに格納されているデータを変更できます。
- たとえば、複数のテーブルへの挿入をコミットするか、エラーが発生した場合にはいっさいコミットしないことができます。 3 つのテーブルに影響する発注書の詳細を変更する場合、それらの変更を 1 つのトランザクションにグループ化できます。 つまり、これらのテーブルに対してクエリを実行すると、すべてのテーブルに変更があるか、いっさい変更がないかのどちらかです。 トランザクションは、複数のテーブル間でデータの一貫性を確保する必要がある場合の一般的な方法です。
トランザクション機能
Microsoft Fabric の SQL 分析エンドポイントでも、同じトランザクション機能がサポートされていますが、読み取り専用クエリのみが対象です。
また、シーケンシャル SELECT ステートメントにトランザクションを使用して、関連するすべてのテーブルに同じ時点からのデータが含まれるようにすることもできます。 たとえば、テーブルに別のトランザクションによって新しい行が追加された場合、その新しい行は、実行中のトランザクション内の SELECT クエリには影響しません。
重要
Microsoft Fabric では、スナップショット分離レベルのみがサポートされています。 T-SQL を使用して分離レベルを変更した場合、クエリの実行時に変更は無視され、分離スナップショット適用されます。
データベース間クエリ トランザクションのサポート
Microsoft Fabric の Warehouse は、レイクハウスの SQL 分析エンドポイントからの読み取りなど、同じワークスペース内のデータベースにまたがるトランザクションをサポートします。 すべての Lakehouse には、読み取り専用 SQL 分析エンドポイントが 1 つあります。 各ワークスペースは、複数のレイクハウスを持つことができます。
トランザクション内での DDL サポート
Microsoft Fabric の Warehouse では、ユーザー定義トランザクション内の CREATE TABLE などの DDL がサポートされています。
さまざまな種類のステートメントのロック
この表では、さまざまな種類のトランザクションに使用されるロックの一覧を示します。すべてのロックはテーブル レベルです。
ステートメントの種類 | 使用されるロック |
---|---|
SELECT | Schema-Stability (Sch-S) |
INSERT | インテント排他 (IX) |
DELETE | インテント排他 (IX) |
UPDATE | インテント排他 (IX) |
COPY INTO | インテント排他 (IX) |
DDL | Schema-Modification (Sch-M) |
これらのロックにより、トランザクションで行が更新されている間にテーブルのスキーマが変更されるなどの競合が防止されます。
動的管理ビュー (DMV) sys.dm_tran_locks で現在保持されているロックに対 てクエリを実行できます。
テーブル内の 1 つ以上の行を更新する 2 つ以上の同時実行トランザクションによる競合は、トランザクションの最後に評価されます。 最初にコミットするトランザクションは正常に完了し、他のトランザクションはロールバックされ、エラーが返されます。 これらの競合は、個々の Parquet ファイル レベルではなく、テーブル レベルで評価されます。
INSERT ステートメントでは常に新しい Parquet ファイルが作成されます。つまり、他のトランザクションとの競合が少なくなります。ただし、テーブルのスキーマが変更される可能性がある DDL を除きます。
トランザクション ログ
Microsoft Fabric の Warehouse でのトランザクション ログは、Parquet ファイルは不変であるため (変更できないため)、Parquet ファイル レベルです。 ロールバックすると、前の Parquet ファイルが指し示されます。 この変更の利点は、トランザクション ログとロールバックがより高速になるという点です。
制限事項
- 分散トランザクションはサポートされていません。
- 保存ポイントはサポートされていません。
- 名前付きトランザクションはサポートされていません。
- マークされたトランザクションはサポートされていません。
- ALTER TABLE は、明示的なトランザクション内ではサポートされていません。
- 現時点では、ウェアハウスでの T-SQL 機能は制限されています。 現在使用できない T-SQL コマンドの一覧については、「T-SQL のセキュリティ、外部からのアクセス」を参照してください。
- トランザクションが空のテーブルにデータを挿入し、ロールバック前に SELECT を発行した場合、自動的に生成される統計にはコミットされていないデータが反映され、統計が不正確になる可能性があります。 統計が不正確な場合、最適化されていないクエリ プランと実行時間につながる可能性があります。 大きな INSERT の後に SELECT を使用するトランザクションをロールバックする場合は、SELECT に記載されている列の統計を更新します。