Hi Felio Sanchez,
De blokkade die u ervaart is een klassieke database-deadlock, meestal geregistreerd als Fout 1205 in SQL Server of Fout 1213 in MySQL. Dit treedt op wanneer twee gelijktijdige transacties elkaar vastzetten in een circulaire wachtrij, waarbij beide een vergrendeling (lock) vasthouden op een record dat het andere proces nodig heeft om door te kunnen gaan.
Om dit permanent op te lossen en uw uitvoeringsvolgorde te optimaliseren, moet u een strikte, universele volgorde voor datatoegang binnen uw gehele applicatie afdwingen. Elke transactie moet tabellen en rijen in exact hetzelfde chronologische pad benaderen. Als één proces de hoofdvoorraadtabel bijwerkt vóór de fulfillment-tabel, moeten alle andere processen die exacte volgorde aanhouden. Door resource locks in een uniforme richting aan te vragen, worden circulaire afhankelijkheden wiskundig onmogelijk en zullen uw transacties veilig in de wachtrij worden geplaatst in plaats van in een deadlock te belanden.
Daarnaast moet u de duur en de omvang van uw database locks minimaliseren. Voer alle zware databerekeningen uit in uw applicatiecode vóórdat u de transactie opent, om de vergrendelingstijd (lock window) kort te houden. Zorg ervoor dat uw query's gebruikmaken van zeer selectieve indexen, zodat de database-engine alleen de specifieke rijen vergrendelt die worden gewijzigd. Dit voorkomt dat het systeem grote blokken data vergrendelt en onbedoeld botst met parallelle voorraadprocessen.
Hopelijk heeft dit antwoord u wat nuttige informatie opgeleverd. Als dat het geval is, klik dan op "accept answer". Mocht u nog vragen hebben, laat dan gerust een reactie achter.
VPHAN