Ook onbekend schreef op zaterdag 22 juli 2006 @ 23:19:
Met enige regelmaat ( 1x in de 10 minuten ongeveer) worden van 2 MySQL tabellen 95% van alle gegevens gewijzigd.
Deze 2 tabellen bevatten nu elk 50 records met elk 16 verschillende gegevens.
Het schrijven van alle gegevens in de MySQL tabel kost veel tijd.
En dit is alleen nog maar een kleine test. Ik verwacht straks minimaal 5.000 records per tabel te hebben. Dit zou kunnen resulteren dat MySQL alleen maar wordt geupdated en andere delen van de site helemaal geen toegang meer krijgen tot de tabellen.
Wat is de snelste manier bij MySQL om zoveel gegevens in 1 keer te wijzigen ?
Is het echt nodig dat je alle gegevens verandert, kan je niet gewoon de nieuwe toevoegen.
En gaat MySQL echt onderuit of is het maar een vermoeden van jou???
Zijn deze tabellen ook muteerbaar vanuit de klant ( Anders kan je een smerige hack gebruiken door alle gegevens te updaten in aparte tabellen en daarna de aparte tabellen te moven over de oude tabellen, dan is alleen je move actie even ingrijpend ( let op alleen myisam ) )
Definieer trouwens eens veel tijd...
Want 100 records met 16 gegevens kost hier geen tijd.
Maar waar je naar kan kijken zijn :
Gebruik alleen vaste velden met correcte omschrijving dus wel : char(16), niet varchar (20) als je gegevens 16 tekens lang kunnen zijn.
Vermijd indexen zoveel mogelijk. Indexen kosten tijd met het updaten / nieuw toevoegen van gegevens.
Indien mogelijk : gooi voor het updaten je index uit, dan een mass update, dan je indexen weer aan, nu worden in 1x al je indexen opnieuw aangemaakt ipv 100x indexen bijwerken.
Zorg dat je server snel genoeg is ( kijk eens met taskmanager / top of mysql 100% cpu pakt ( nieuwe comp )/ 100% schijfbelasting pakt ( nieuwe raid config ) )
Gebruik geen innodb maar gewoon myisam ( ervanuit gaande dat als er iets beschadigd het niet erg is als je 10 min zonder gegevens zit )
Als 95% verandert kan je dit misschien ophogen naar 100%, dan kan je gewoon tabel verwijderen en opnieuw aanmaken, dit is sneller dan het updaten van 95% van de gegevens.
Maar bovenal.waar zit die laatste 5% in??? Want als die 5% gecheckt moet worden met de vorige set gegevens dan ben je daar langer mee bezig dan als je de hele tabel leeggooit en dan 100% vult, scheelt je een check.
En denk eens na of echt de gegevens gewijzigd moeten worden, of dat je niet gewoon alles kan toevoegen ( en alleen de laatste 10 minuten tonen ) en dan 1x per uur alles weggooien. Insert is goedkoper dan update enz.