Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vztahuje se na:✅ koncový bod analýzy SQL a Sklad v rámci Microsoft Fabric
Podobně jako v SQL Serveru umožňují transakce řídit potvrzení nebo vrácení zpět dotazů pro čtení a zápis.
Fabric Data Warehouse podporuje ACID-kompatibilní transakce. Každá transakce je atomická, konzistentní, izolovaná a odolná (ACID). Všechny operace v rámci jedné transakce jsou považovány za atomické, všechny se podaří nebo všechny selžou. Pokud jakákoliv deklarace v transakci selže, celá transakce se vrátí zpět.
Explicitní transakce
Data uložená v tabulkách ve skladu můžete upravit pomocí explicitních transakcí pro seskupení změn.
Můžete například potvrdit vložení do více tabulek, nebo do žádné z tabulek, pokud dojde k chybě. Pokud měníte podrobnosti o nákupní objednávce, která ovlivňuje tři tabulky, můžete tyto změny seskupit do jedné transakce. To znamená, že když jsou tyto tabulky dotazovány, buď všechny obsahují změny, nebo žádná z nich neobsahuje. Transakce jsou běžným postupem, kdy potřebujete zajistit, aby vaše data byla konzistentní napříč více tabulkami.
Pro explicitní transakce můžete použít standardní mechanismy řízení syntaxe T-SQL (BEGIN TRAN, COMMIT TRANa ROLLBACK TRAN) . Další informace naleznete v tématu: - BEGIN TRANSACTION
- COMMIT TRANSACTION
-
Například Fabric Data Warehouse bude s těmito změnami schématu zacházet jako s jednou atomovou jednotkou:
-- Sample Syntax---
BEGIN TRAN;
ALTER TABLE <table_name> ADD <column_name> <type>;
ALTER TABLE <table_name> DROP COLUMN <column_name>;
COMMIT;
Pokud některý příkaz v transakci selže, všechny změny schématu se automaticky vrátí zpět.
Fabric Data Warehouse podporuje provádění následujících operací v explicitní transakci:
CREATE TABLEDROP TABLETRUNCATE TABLECTASsp_rename-
ALTER TABLEpřidání nulovatelných sloupců -
ALTER TABLEodstranit sloupce -
ALTER TABLEpřidat nebo odebratPRIMARY KEY,UNIQUE, aFOREIGN KEYomezení s klíčovým slovemNOT ENFORCED - Více
ALTER TABLEpříkazů -
ALTER TABLEv distribuovaných dočasných tabulkách - Podporované operace ALTER COLUMN
Podpora transakcí mezi databázemi
Sklad v Microsoft Fabric podporuje transakce, které se nacházejí napříč sklady ve stejném pracovním prostoru, včetně čtení z koncového bodu analýzy SQL ve službě Lakehouse. Příklad najdete v tématu Zápis dotazu SQL napříč databázemi.
Vysvětlení uzamčení a blokování v Fabric Data Warehouse
Fabric Data Warehouse používá zamykání na úrovni tabulky bez ohledu na to, jestli se dotaz dotkne jednoho řádku nebo mnoha řádků. Následující tabulka obsahuje seznam zámků používaných pro různé operace T-SQL.
| Typ příkazu | Uzamčení pořízené |
|---|---|
| DML | |
| SELECT | Schema-Stability (Sch-S) |
| INSERT | Výhradní záměr (IX) |
| DELETE | Výhradní záměr (IX) |
| UPDATE | Výhradní záměr (IX) |
| MERGE | Výhradní záměr (IX) |
| KOPÍROVAT DO | Výhradní záměr (IX) |
| DDL | |
| Vytvořit tabulku (CREATE TABLE) | Schema-Modifikace (Sch-M) |
| ALTER TABLE | Schema-Modifikace (Sch-M) |
| DROP TABLE (vymazat tabulku) | Schema-Modifikace (Sch-M) |
| TRUNCATE TABLE | Schema-Modifikace (Sch-M) |
| VYTVOŘIT TABULKU JAKO VÝBĚR | Schema-Modifikace (Sch-M) |
| VYTVOŘENÍ TABULKY JAKO KLON | Schema-Modifikace (Sch-M) |
Aktuálně držené zámky lze dotazovat pomocí zobrazení dynamické správy (DMV) sys.dm_tran_locks.
Další informace o zámkech, eskalaci zámku a kompatibilitě zámků naleznete v průvodci zamykáním transakcí a verzování řádků.
Pokud se dotazy zobrazují zablokované nebo trvají déle, než se čekalo kvůli zámkům, přečtěte si téma Řešení potíží s blokováním dotazů v Fabric Data Warehouse.
Izolace snímků
Fabric Data Warehouse vynucuje izolaci snímků u všech transakcí. Izolace snímku je úroveň izolace na základě řádků, která zajišťuje konzistenci dat na úrovni transakcí a používá verze řádků uložené v tempdb k výběru řádků k aktualizaci. Transakce používá verze datového řádku, které existují při zahájení transakce. Tím se zajistí, že každá transakce funguje na konzistentním snímku dat, jak existovalo na začátku transakce.
V režimu izolace snímků dotazy prováděné v rámci transakce vidí stejnou verzi nebo snímek, který je založen na stavu databáze v okamžiku zahájení transakce. Při izolaci snímků transakce, které upravují data, neblokují transakce, které čtou data, a naopak transakce, které čtou data, neblokují transakce, které zapisují data. Toto optimistické, neblokující chování také výrazně snižuje pravděpodobnost zablokování u složitých transakcí.
Pokud ke změně úrovně izolace použijete T-SQL, změna se při provádění dotazu ignoruje a použije se izolace snímků.
V izolaci snímků jsou možné konflikty dvojitého zápisu, další informace najdete v oddíle Pochopit konflikty dvojitého zápisu v Fabric Data Warehouse.
Zámky schématu
Zámky schématu brání konfliktům u příkazů DDL, jako je změna schématu tabulky při aktualizaci řádků v transakci. Mějte na paměti, že operace DDL, jako jsou změny schématu a migrace, můžou blokovat nebo být blokovány aktivními čtecími úlohami.
- Během operací jazyka DDL (Data Definition Language) používá databázový stroj zámky na úpravy schématu (
Sch-M). Po dobu, kdy je držen,Sch-Mzámek zabrání veškerému souběžnému přístupu k tabulce, dokud není zámek uvolněn. - Během operací jazyka DML (Data Manipulat Language) používá Database Engine zámky stability schématu (
Sch-S). Operace, které získávajíSch-Mzámky, jsou blokoványSch-Számky. Ostatní transakce se budou dál spouštět během kompilace dotazu, ale operace DDL se zablokují, dokud nebudou moct získat výhradní přístup ke schématu. - Operace DDL také získávají exkluzivní zámek na
Xřádcích v systémových zobrazeních, jako jsousys.tablesasys.objects, které jsou přidružené k cílové tabulce, po dobu trvání transakce. Tím se zablokují současnéSELECTpříkazy nasys.tablesasys.objects.
Osvědčené postupy pro zabránění blokování
- Vyhněte se dlouhotrvajícím transakcím nebo plánování během období s nízkou nebo žádnou souběžnou aktivitou.
- Naplánujte operace DDL pouze během časových období údržby, abyste minimalizovali blokování.
- Zatímco příkazy DDL je možné spouštět uvnitř explicitních uživatelských transakcí (
BEGIN TRAN), měly by se používat s opatrností v souběžných úlohách. Kvůli zamykacímu chování může DDL v rámci transakce blokovat současné operace DML nebo SELECT na dotčených tabulkách a také SELECT dotazy na zobrazení systémového katalogu, jako jesys.tablesnebosys.objects. Chcete-li monitorovat a řešit potenciální konflikty zámků, použijtesys.dm_tran_locks. - Monitorujte zámky a konflikty ve skladu.
- Ke kontrole aktuálních zámků použijte sys.dm_tran_locks .
Pochopení konfliktů při zápisu ve Fabric Data Warehouse
Konflikty při souběžném zápisu mohou nastat, když se dvě transakce pokusí o UPDATE, DELETE, MERGE nebo TRUNCATE stejnou tabulku.
Konflikty zápisu nebo konflikty aktualizací jsou možné na úrovni tabulky, protože Fabric Data Warehouse používá zamykání na úrovni tabulky. Pokud se dvě transakce pokusí upravit různé řádky ve stejné tabulce, mohou být stále v konfliktu.
Konflikty zápisu většinou vznikají ze dvou scénářů:
- Konflikty úloh vyvolané uživatelem
- Stejnou tabulku současně upravuje více uživatelů nebo procesů.
- Může nastat v kanálech ETL, dávkových aktualizacích nebo překrývajících se transakcích.
- Konflikty vyvolané systémem
- Úlohy systému na pozadí, jako je automatické komprimace dat, přepisují soubory s nízkou kvalitou.
- To může být v konfliktu s uživatelskými transakcemi, ačkoli preempce komprimace dat aktivně zabraňuje konfliktům zápisu a zápisu tohoto typu.
Pokud dojde ke konfliktu při souběžném zápisu, mohou se zobrazit chybové zprávy, například:
- Chyba 24556: Transakce izolace snímku byla přerušena kvůli konfliktu při aktualizaci. Použití izolace snímků pro přístup k tabulce%.*ls přímo nebo nepřímo v databázi%.*ls může způsobit konflikty aktualizací, pokud byly řádky v této tabulce odstraněny nebo aktualizovány jinou souběžnou transakcí. Zkuste transakci zopakovat.
- Chyba 24706: Transakce s izolací snímků byla přerušena kvůli konfliktu aktualizace. Izolaci snímků nelze použít pro přístup k tabulce%.*ls přímo nebo nepřímo v databázi%.*ls k aktualizaci, odstranění nebo vložení řádku, který byl změněn nebo odstraněn jinou transakcí. Zkuste transakci zopakovat.
Pokud narazíte na tyto chybové zprávy, jedna nebo více transakcí byla úspěšná a jedna nebo více konfliktních transakcí selhala. Zkuste transakce, které selhaly.
Poznámka:
I když transakce MERGE vedou pouze ke změnám typu append-only, stále vytvářejí konflikt zápisu. Pokud MERGE transakce ovlivňuje různé řádky než které jsou ovlivněny jinými souběžnými transakcemi DML, může dojít k této chybě, pokud transakce MERGE není první, která potvrdí: Transakce při izolaci snímku byla přerušena kvůli konfliktu aktualizace.
Osvědčené postupy pro zabránění konfliktům při zápisu
Aby nedocházelo ke konfliktům při současném zápisu:
- Vyhněte se souběžným
UPDATE,DELETEaMERGEoperacím ve stejné tabulce.- Věnujte pečlivou pozornost operacím
UPDATEDELETEMERGEv rámci vícestupňových transakcí.
- Věnujte pečlivou pozornost operacím
- Použijte logiku opakování ve všech aplikacích a dotazech.
- Implementujte logiku opakování v uložených procedurách a kanálech ETL.
- Přidejte opakovací logiku se zpožděním do datových toků nebo aplikací pro řešení přechodných konfliktů.
- Pomocí exponenciálního navýšení čekací doby se vyhnete bouřím pokusů, které se zhoršují z důvodu přechodných přerušení sítě. Další informace najdete v tématu Vzor opakování.
- Konflikty zápisu se službou komprimace dat na pozadí Fabric Data Warehouse jsou možné, ale obvykle jim brání funkce Předem zastavování komprese dat.
Blokování tabulek a souborů Parquet
Konflikty ze dvou nebo více souběžných transakcí, které aktualizují jeden nebo více řádků v tabulce, se vyhodnocují na konci transakce. První transakce, která se potvrdí, se úspěšně dokončí a ostatní transakce se vrátí zpět s chybou. Tyto konflikty se vyhodnocují na úrovni tabulky, nikoli na úrovni jednotlivých souborů Parquet.
Příkazy INSERT vždy vytvářejí nové soubory Parquet, což znamená méně konfliktů s jinými transakcemi. Výjimkou je DDL, protože schéma tabulky se může měnit.
Omezení
- Distribuované transakce nejsou například
BEGIN DISTRIBUTED TRANSACTIONpodporovány . - Body uložení nejsou podporovány.
- Pojmenované transakce nejsou podporovány.
- Označené transakce nejsou podporovány.
- V tuto chvíli je ve skladu omezené funkce T-SQL. Seznam příkazů T-SQL, které nejsou aktuálně dostupné, najdete v plošné oblasti jazyka SQL v Fabric Data Warehouse.
- Pokud transakce obsahuje vložení dat do prázdné tabulky a před vrácením zpět vydá select, automaticky generované statistiky můžou stále odrážet nepotvrzená data, což způsobuje nepřesné statistiky. Nepřesné statistiky můžou vést k neoptimalizovaným plánům dotazů a časům provádění. Pokud vrátíte transakci se SELECTs po velkém INSERT, aktualizujte statistiky pro sloupce uvedené ve SELECTs.