ACID-transacties
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerEen deadlock ontstaat wanneer twee transacties elkaar vasthouden: transactie A wacht op B, terwijl B wacht op A. De database breekt dan meestal één transactie af.
Een deadlock ontstaat wanneer twee transacties elkaar blokkeren. Transactie A heeft rij 1 vast en wacht op rij 2. Transactie B heeft rij 2 vast en wacht op rij 1. Geen van beide kan verder.
Databases detecteren zo'n kring meestal automatisch. Ze kiezen één transactie als slachtoffer, breken die af en laten de andere doorgaan. De afgebroken transactie moet daarna opnieuw geprobeerd worden.
Een deadlock is dus geen gewone traagheid. Het is een logische blokkade in de volgorde waarin transacties data vastnemen.
Het klassieke patroon is twee processen die dezelfde tabellen in andere volgorde bijwerken.
-- Transactie A
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- Transactie B
UPDATE accounts SET balance = balance - 50 WHERE id = 2;
UPDATE accounts SET balance = balance + 50 WHERE id = 1;Als A eerst account 1 lockt en B eerst account 2, kan elk daarna wachten op de rij die de ander vasthoudt.
Bij een lock wait wacht één transactie tot een andere klaar is. Dat is normaal gedrag. Zodra de eerste transactie commit of rollback doet, kan de tweede verder.
Bij een deadlock kan niemand verder zonder ingreep, omdat de wachtrij in een cirkel zit. Daarom moet de database één transactie stoppen.
Gebruik een vaste volgorde. Werk tabellen en rijen altijd in dezelfde volgorde bij.
Hou transacties kort. Doe geen netwerkcalls, gebruikersinteractie of lange berekeningen binnen een open transactie.
Indexeer filters goed. Zonder passende index raakt een update soms veel meer rijen dan nodig.
Voorzie retries. Een applicatie moet een deadlock kunnen herkennen en de transactie veilig opnieuw proberen.
Deadlocks komen niet alleen in applicaties voor. Ook batchjobs, ETL-processen en upserts kunnen botsen met operationele processen. Een nachtelijke lading die brede updates doet op tabellen waar overdag gebruikers op werken, kan transacties langer vasthouden dan verwacht.
Daarom horen zware ladingen in een eigen venster, staginglaag of data warehouse, en niet blind op dezelfde tabellen die je operationele systeem nodig heeft.
Los de oorzaak op, niet alleen de foutmelding. Retry is nodig, maar herhaalde deadlocks wijzen op ontwerp of timing.
Lees de deadlock graph. Die toont welke queries, locks en tabellen betrokken waren.
Let op brede updates. Eén update zonder goede filter kan veel locks nemen en andere transacties blokkeren.
ACID-transacties zijn de vier garanties (Atomicity, Consistency, Isolation, Durability) die zorgen dat je data correct blijft, ook als een p...
Lees meerAlpha Miner is een vroeg process-discoveryalgoritme dat causale, parallelle en exclusieve relaties uit direct-followgedrag afleidt en omzet ...
Lees meerApache Spark is een open-source engine voor grootschalige data-analyse op een cluster. Je schrijft SQL of DataFrames in Python, Scala of Jav...
Lees meerEen automated cloud flow start automatisch door een gebeurtenis in een gekoppelde dienst, zoals een nieuwe Dataverse-rij, ontvangen e-mail o...
Lees meerChange Data Capture (CDC) is een techniek die elke wijziging in een bronsysteem registreert en doorstuurt naar downstream-systemen. Zo houd ...
Lees meer
Nieuw in Microsoft Fabric? Zo verschillen een lakehouse en een warehouse, in mensentaal: wat ze doen, wanneer je wat kiest en wanneer je bei...
Twijfel je tussen Power BI en Qlik? Lees de vergelijking van Data Panda en ontdek de verschillen in gebruiksgemak, prijs, hosting, integrati...