Het probleem is als volgt:
Ik heb een MSSQL 2000 database (webapp) en deze bevat veel gegevens verspreid over verschillende tabellen. (per klant kan dit over de 100.000 records gaan in zo'n 15 tabellen. In het totaal zijn er miljoenen records verspreid over die tabellen).
Nou komt het uiteraard wel eens voor dat een klant er mee stopt, en mogen zijn gegevens weg gegooit worden. Maar, om zoveel records te verwijderen zorgt voor een lange lock op de tabellen. Nu heb ik mij al voorgenomen om dit verwijderen 's nachts te doen, maar dan nog, het proces kan aardig wat tijd in beslag nemen (4 tot 8 min zelfs) en zodra er wat weggeschreven moet worden onder de naam van die klant (ook al wordt hij verwijderd, kan dat gebeuren) kan het hele systeem niet gebruikt worden, omdat de invoer van die klant, in de wacht wordt gezet, en alle andere writes naar de tabel moeten dan achteraan de rij aansluiten.
In eerste instantie was het gewoon een delete from clienten where id = x, en de relaties alles laten afhandelen, maar dit zorge voor een timeout van het andere verkeer.
Toen heb ik geprobeerd om per tabel te deleten, en als laaste clienten. Maar hiermee werd de executietijd alleen maar langer en de lange locks bleven. (met timeouts dus)
Wat ik nog niet heb geprobeerd, is in een aparte tabel bijhouden wie er verwijderd gaan worden, en als hij daarin staat, mag een client niets meer wegschrijven, zodat hij ook de wachtrij niet kan ophouden. Dat ga ik zometeen nog proberen, maar ik vroeg mij ondertussen af of jullie misschien nog goede ideeën hebben om dit aan te pakken.
Bedankt!
Ik heb een MSSQL 2000 database (webapp) en deze bevat veel gegevens verspreid over verschillende tabellen. (per klant kan dit over de 100.000 records gaan in zo'n 15 tabellen. In het totaal zijn er miljoenen records verspreid over die tabellen).
Nou komt het uiteraard wel eens voor dat een klant er mee stopt, en mogen zijn gegevens weg gegooit worden. Maar, om zoveel records te verwijderen zorgt voor een lange lock op de tabellen. Nu heb ik mij al voorgenomen om dit verwijderen 's nachts te doen, maar dan nog, het proces kan aardig wat tijd in beslag nemen (4 tot 8 min zelfs) en zodra er wat weggeschreven moet worden onder de naam van die klant (ook al wordt hij verwijderd, kan dat gebeuren) kan het hele systeem niet gebruikt worden, omdat de invoer van die klant, in de wacht wordt gezet, en alle andere writes naar de tabel moeten dan achteraan de rij aansluiten.
In eerste instantie was het gewoon een delete from clienten where id = x, en de relaties alles laten afhandelen, maar dit zorge voor een timeout van het andere verkeer.
Toen heb ik geprobeerd om per tabel te deleten, en als laaste clienten. Maar hiermee werd de executietijd alleen maar langer en de lange locks bleven. (met timeouts dus)
Wat ik nog niet heb geprobeerd, is in een aparte tabel bijhouden wie er verwijderd gaan worden, en als hij daarin staat, mag een client niets meer wegschrijven, zodat hij ook de wachtrij niet kan ophouden. Dat ga ik zometeen nog proberen, maar ik vroeg mij ondertussen af of jullie misschien nog goede ideeën hebben om dit aan te pakken.
Bedankt!