Tranzakciók Fabric adattárház

A következőre vonatkozik:✅ SQL Analytics végpont és a Microsoft Fabric Warehouse

A SQL Server viselkedéséhez hasonlóan a tranzakciók lehetővé teszik az olvasási és írási lekérdezések véglegesítésének vagy visszaállításának szabályozását.

Fabric Data Warehouse támogatja az ACID-kompatibilis tranzakciókat. Minden tranzakció atomi, konzisztens, izolált és tartós (ACID). Az egyetlen tranzakción belüli összes művelet atomi módon lesz kezelve, minden sikeres vagy sikertelen. Ha a tranzakció bármely utasítása meghiúsul, a teljes tranzakció vissza lesz állítva.

Explicit tranzakciók

A raktár tábláiban tárolt adatokat explicit tranzakciók használatával módosíthatja a módosítások csoportosításához.

Például több táblára is véglegesíthet beszúrásokat, vagy hiba esetén egyik táblát sem. Ha egy három táblát érintő vásárlási rendelés adatait módosítja, ezeket a módosításokat egyetlen tranzakcióba csoportosíthatja. Ez azt jelenti, hogy amikor lekérdezik ezeket a táblákat, vagy mindegyikben vannak változások, vagy egyik sem. A tranzakciók gyakori gyakorlatnak számítanak, ha több táblában is konzisztensnek kell lennie az adatoknak.

Az explicit tranzakciókhoz szabványos T-SQL (BEGIN TRANCOMMIT TRANés ROLLBACK TRAN) szintaxis-vezérlési mechanizmusokat használhat. További információ: – TRANZAKCIÓJÁNAK MEGKEZDÉSE - TRANZAKCIÓVÉGLEGESÍTÉSE - TRANZAKCIÓ-VISSZAÁLLÍTÁSA

A Fabric Data Warehouse például egyetlen atomi egységként kezeli ezeket a sémamódosításokat:

-- Sample Syntax--- 
BEGIN TRAN; 
ALTER TABLE <table_name> ADD <column_name> <type>; 
ALTER TABLE <table_name> DROP COLUMN <column_name>; 
COMMIT; 

Ha a tranzakció bármely utasítása meghiúsul, a rendszer automatikusan visszaállítja az összes sémamódosítást.

Fabric Data Warehouse támogatja a következő műveletek explicit tranzakción belüli végrehajtását:

  • CREATE TABLE
  • DROP TABLE
  • TRUNCATE TABLE
  • CTAS
  • sp_rename
  • ALTER TABLE null értékű oszlopok hozzáadása
  • ALTER TABLE oszlopok elhagyása
  • ALTER TABLE korlátok hozzáadása vagy elhagyása PRIMARY KEY, UNIQUE, és FOREIGN KEY a NOT ENFORCED kulcsszóval
  • Több ALTER TABLE utasítás
  • ALTER TABLE ideiglenes elosztott táblákon

Adatbázisközi lekérdezési tranzakciók támogatása

A Microsoft Fabric-beli warehouse támogatja azokat a tranzakciókat, amelyek egy munkaterületen belül található raktárakra terjednek ki, beleértve a Lakehouse SQL-elemzési végpontjának olvasását is. Példa: Adatbázisközi SQL-lekérdezés írása.

A Fabric Data Warehouse zárolásának és blokkolásának ismertetése

Fabric Data Warehouse táblaszintű zárolást használ, függetlenül attól, hogy egy lekérdezés egy vagy több sort érint-e. Az alábbi táblázat a különböző T-SQL-műveletekhez használt zárolások listáját tartalmazza.

Utasítás típusa Zárolva
DML
SELECT Schema-Stability (Sch-S)
INSERT Kizárólagos célkitűzés (IX)
DELETE Kizárólagos célkitűzés (IX)
UPDATE Kizárólagos célkitűzés (IX)
MERGE Kizárólagos célkitűzés (IX)
COPY INTO Kizárólagos célkitűzés (IX)
DDL
TÁBLA LÉTREHOZ Séma módosítás (Sch-M)
ALTER TABLE Séma módosítás (Sch-M)
DROP TABLE Séma módosítás (Sch-M)
TÁBLÁZAT CSONKÍTÁSA Séma módosítás (Sch-M)
TÁBLA LÉTREHOZÁSA KIVÁLASZTÁSSAL Séma módosítás (Sch-M)
TÁBLA LÉTREHOZÁSA KLÓNKÉNT Séma módosítás (Sch-M)

A dinamikus felügyeleti nézettel (DMV) jelenleg tárolt zárolásokat lekérdezheti sys.dm_tran_locks.

A zárolásokról, a zárolások eszkalálásáról és a zárolás kompatibilitásáról további információt a tranzakciózárolási és a sorverzió-verziószámozási útmutatóban talál.

Pillanatképek elkülönítése

Fabric Data Warehouse minden tranzakció pillanatkép-elkülönítését kényszeríti ki. A pillanatkép-elkülönítés egy soralapú elkülönítési szint, amely tranzakciószintű konzisztenciát biztosít az adatokhoz, és a sorokban tárolt tempdb verziókkal választja ki a frissítendő sorokat. A tranzakció a tranzakció kezdetekor létező adatsor-verziókat használja. Ez biztosítja, hogy minden tranzakció konzisztens pillanatképet adjon az adatokról a tranzakció kezdetekor.

Pillanatkép-elkülönítés esetén a tranzakció lekérdezései ugyanazt a verziót vagy pillanatképet látják az adatbázis állapota alapján, amikor a tranzakció megkezdődik. A pillanatképek elkülönítése esetén az adatokat módosító tranzakciók nem tiltják le az adatokat olvasott tranzakciókat, és az adatokat olvasott tranzakciók nem tiltják le az adatokat író tranzakciókat. Ez az optimista, nem blokkoló viselkedés jelentősen csökkenti az összetett tranzakciók holtpontjainak valószínűségét is.

Ha A T-SQL használatával módosítja az elkülönítési szintet, a rendszer figyelmen kívül hagyja a módosítást a lekérdezés végrehajtásakor, és alkalmazza a pillanatkép-elkülönítést.

Pillanatkép izoláció esetén írás-írás vagy frissítési ütközések lehetségesek. További információért lásd: A Fabric Data Warehouse írás-írás ütközései megértése.

Sémazárolások

A sémazárolások megakadályozzák a DDL-utasítások ütközéseit, például egy tábla sémájának módosítását, miközben egy tranzakcióban folyamatosan frissítik a sorokat. Vegye figyelembe, hogy a DDL-műveletek, például a sémamódosítások és a migrálások blokkot okozhatnak vagy blokkolhatók az aktív olvasási munkaterhelések által.

  • Az adatdefiníciós nyelvi (DDL) műveletek során a Database Engine sémamódosítási (Sch-M) zárolásokat használ. A zárolás megtartása során a Sch-M zárolás megakadályozza a tábla egyidejű elérését, amíg a zárolás fel nem oldódik.
  • Az adatmanipulációs nyelv (DML) műveletei során a Database Engine sémastabilitási (Sch-S) zárolásokat használ. A Sch-M zárolásokat kérő műveleteket a Sch-S zárolások blokkolják. Más tranzakciók továbbra is futnak a lekérdezés fordítása közben, de a DDL-műveletek mindaddig le vannak tiltva, amíg kizárólagos hozzáférést nem kapnak a sémához.
  • A DDL-műveletek kizárólagos (X) zárolást is szereznek a céltáblához kapcsolódó rendszernézetek, például sys.tables és sys.objects soraiban a tranzakció időtartama alatt. Ez blokkolja az egyidejű SELECT utasításokat sys.tables és sys.objects.

Ajánlott eljárások a blokkolás elkerüléséhez

  • Kerülje a hosszú ideig futó tranzakciókat, vagy ütemezze az alacsony vagy nem egyidejű tevékenységek időszakait.
  • A DDL-műveletek ütemezése csak karbantartási időszakokban a blokkolás minimalizálása érdekében.
  • Bár a DDL-utasítások explicit felhasználói tranzakciókon (BEGIN TRAN) belül végrehajthatók, azokat körültekintően kell használni az egyidejű számítási feladatokban. A zárolási viselkedés miatt a tranzakción belüli DDL blokkolhatja az egyidejű DML- vagy SELECT-műveleteket az érintett táblákon, valamint a rendszerkatalógus-nézetek select lekérdezéseit, például sys.tables a sys.objects. A lehetséges zárolási ütközések figyeléséhez és elhárításához használja a következőt sys.dm_tran_locks: .
  • A raktár zárolásainak és ütközéseinek monitorozása.
    • Az aktuális zárolások vizsgálatához használja a sys.dm_tran_locks.

Írási ütközések megértése a Fabric Adat Raktárban

Írási-írási ütközések akkor fordulhatnak elő, ha két tranzakció kísérel meg UPDATE, DELETE, MERGE vagy TRUNCATE ugyanazt a táblát.

Írási-írási ütközések vagy frissítési ütközések a tábla szintjén is lehetségesek, mivel Fabric Data Warehouse táblaszintű zárolást használ. Ha két tranzakció megkísérli módosítani ugyanabban a táblában a különböző sorokat, akkor is ütközhetnek.

Az írási-írási ütközések többnyire két forgatókönyvből erednek:

  • Felhasználó által kiváltott számítási feladatok ütközései
    • Egyszerre több felhasználó vagy folyamat is módosítja ugyanazt a táblát.
    • Előfordulhat ETL-folyamatokban, kötegfrissítésekben vagy átfedésben lévő tranzakciókban.
  • Rendszer által kiváltott ütközések
    • A háttérrendszer-feladatok, például az automatikus adattömörítések rossz minőségű fájlokat írnak át.
    • Ezek ütközhetnek a felhasználói tranzakciókkal, bár az adattömörítés megszakítása aktívan megakadályozza az ilyen típusú írási-írási ütközéseket.

Írási-írási ütközés esetén hibaüzenetek jelenhetnek meg, például:

  • 24556-os hiba: Frissítésütközés miatt megszakadt a pillanatkép-elkülönítési tranzakció. A pillanatkép izoláció használata esetén a "%.*ls" tábla közvetlen vagy közvetett elérése az "%.*ls" adatbázisban frissítési ütközéseket okozhat, ha a tábla sorait egy másik egyidejű tranzakció törölte vagy frissítette. Próbálkozzon újra a tranzakcióval.
  • 24706-os hiba: Frissítési ütközés miatt megszakadt a pillanatkép-elkülönítési tranzakció. A pillanatfelvétel-izolációt nem használhatja arra, hogy közvetlenül vagy közvetve elérje a „%.*ls” táblát az „%.*ls” adatbázisban, hogy frissítsen, töröljön vagy beszúrjon egy olyan sort, amelyet egy másik tranzakció már módosított vagy törölt. Próbálkozzon újra a tranzakcióval.

Ha ezeket a hibaüzeneteket tapasztalja, egy vagy több tranzakció sikeres volt, és egy vagy több ütköző tranzakció meghiúsult. Próbálja újra a sikertelen tranzakciókat.

Megjegyzés:

Még ha MERGE a tranzakciók csak hozzáfűző módosításokat eredményeznek, akkor is írási-írási ütközést okoznak. Ha MERGE a tranzakció az egyidejű DML-tranzakcióktól eltérő sorokat érint, akkor ez a hiba akkor fordulhat elő, ha MERGE nem ez az első véglegesítésre kerülő tranzakció: "A pillanatkép-elkülönítési tranzakció megszakadt a frissítési ütközés miatt."

Ajánlott eljárások írási-írási ütközések elkerüléséhez

Írási-írási ütközések elkerülése:

  • Kerülje az egyidejű UPDATE, DELETE és MERGE műveleteket ugyanazon a táblán.
    • Ügyeljen a UPDATEDELETEMERGE műveletekre többlépéses tranzakciókon belül.
  • Az Újrapróbálkozás logikája minden alkalmazásban és lekérdezésben használható.
    • Újrapróbálkoztatási logika implementálása tárolt eljárásokban és ETL-folyamatokban.
    • Adjon hozzá újrapróbálkozási logikát a folyamatok vagy alkalmazások késleltetésével az átmeneti ütközések kezeléséhez.
      • Exponenciális visszalépéssel elkerülheti az átmeneti hálózati fennakadásokat rontó újrapróbálkozási viharokat. További információ: Újrapróbálkozási minta.
  • A Fabric Data Warehouse háttéradat-tömörítési szolgáltatással való írás-írás ütközések lehetségesek, de általában az Adattömörítés megszakítása funkció akadályozza meg.

Tábla- és parquetfájl-blokkolás

A tábla egy vagy több sorát frissítő két vagy több egyidejű tranzakció ütközései a tranzakció végén lesznek kiértékelve. Az első tranzakció véglegesítése sikeresen megtörténik, míg a többi tranzakció hiba miatt visszaállításra kerül. Ezeket az ütközéseket a rendszer a tábla szintjén értékeli ki, nem pedig az egyes parquet-fájlok szintjén.

Az INSERT utasítások mindig új parquet-fájlokat hoznak létre, ami kevesebb ütközést jelent más tranzakciókkal, kivéve a DDL-t, mert a tábla sémája megváltozhat.

Korlátozások

  • Az elosztott tranzakciók például nem támogatottak BEGIN DISTRIBUTED TRANSACTION.
  • A mentési pontok nem állnak rendelkezésre.
  • Az elnevezett tranzakciók nem támogatottak.
  • A megjelölt tranzakciók nem támogatottak.
  • Jelenleg a T-SQL-funkciók korlátozottak a raktárban. A jelenleg nem elérhető T-SQL-parancsok listáját a Fabric Data Warehouse "T-SQL Surface Area" című részében találja.
  • Ha egy tranzakció adatbeszúrással rendelkezik egy üres táblába, és a visszaállítás előtt kibocsát egy SELECT-et, az automatikusan létrehozott statisztikák továbbra is tükrözhetik a nem véglegesített adatokat, ami pontatlan statisztikákat eredményez. A pontatlan statisztikák nem optimális lekérdezési tervekhez és végrehajtási időkhöz vezethetnek. Ha egy nagyobb INSERT után visszaállít egy tranzakciót, amely SELECT-eket tartalmaz, frissítse a statisztikákat a SELECT-ben említett oszlopokhoz.
  • SQL Analytics-végpont vagy a Warehouse lekérdezése a Microsoft Fabricban
  • Táblázatok