Ik heb een MySQL database (versie 5.1.53), geïnstalleerd met Wamp.
Het draait op een pc van 3 maanden oud, met Windows 7 64bit, 4GB ram (2GB vrij), standaard 500GB HD (400GB vrij).
Alle tabellen in deze database is van het type MyISAM en kunnen aardig wat records bevatten, waarvan er eentje er zelfs 30 miljoen heeft.
Elke tabel heeft drie kolommen van het type binary(x), waarbij de eerste 2 gezamenlijk de PK vormen. Er zitten verder geen triggers of andere indexen op de kolommen. Ook geen auto-increment key o.i.d..
Er zijn op de gehele database maximaal 4 queries tegelijkertijd actief. Vaak gebruiken ze elk een andere tabel, maar het komt een enkele keer voor dat ze de zelfde tabel gebruiken.
Uiteindelijk ben ik tot de conclusie gekomen dat de harde schijf de bottleneck is, dus zoek ik naar mogelijkheden om de schrijf/leessnelheid naar de database te vergroten zonder hardware aanpassingen te doen.
De selectquery luidt altijd: "SELECT Kolom1, Kolom2, Kolom3 FROM Tabelnaam LIMIT 0, 1";
Er zit geen WHERE conditie in omdat elk record goed is.
Nadat ik het record heb gebruikt, verwijder ik hem met "DELETE FROM Tabelnaam WHERE Kolom1 = Conditie1 AND Kolom2 = Conditie2".
Tussen de select en delete queries insert ik records in andere tabellen met "INSERT IGNORE INTO Tabelnaam" en dan de kolommen erachteraan.
Ik heb de laatste query geprobeerd te optimaliseren met m.b.v. een transactie te openen en dan eerst een select en vervolgens een gewone insert te doen zonder gebruik te maken van ignore, maar dat leverde geen snelheidswinst op.
Losse query's zijn niet traag o.i.d. Een losse query duurt minder dan 0,001 seconde.
Verder heb ik nog geprobeerd om m.b.v. parameters het e.e.a. te versnellen, maar dat is niet gelukt:
key_buffer_size: Geen merkbaar effect omdat ik waarschijnlijk zonder WHERE een record opvraag.
table_cache: Staat nu op 256, maar ook lijkt dat weinig tot geen verschil te geven t.o. de oude waarde.
tmp_table_size: Heeft ook geen merkbaar effect.
Hebben jullie nog suggesties om bepaalde parameters of zelfs query's aan te passen?
Het draait op een pc van 3 maanden oud, met Windows 7 64bit, 4GB ram (2GB vrij), standaard 500GB HD (400GB vrij).
Alle tabellen in deze database is van het type MyISAM en kunnen aardig wat records bevatten, waarvan er eentje er zelfs 30 miljoen heeft.
Elke tabel heeft drie kolommen van het type binary(x), waarbij de eerste 2 gezamenlijk de PK vormen. Er zitten verder geen triggers of andere indexen op de kolommen. Ook geen auto-increment key o.i.d..
Er zijn op de gehele database maximaal 4 queries tegelijkertijd actief. Vaak gebruiken ze elk een andere tabel, maar het komt een enkele keer voor dat ze de zelfde tabel gebruiken.
Uiteindelijk ben ik tot de conclusie gekomen dat de harde schijf de bottleneck is, dus zoek ik naar mogelijkheden om de schrijf/leessnelheid naar de database te vergroten zonder hardware aanpassingen te doen.
De selectquery luidt altijd: "SELECT Kolom1, Kolom2, Kolom3 FROM Tabelnaam LIMIT 0, 1";
Er zit geen WHERE conditie in omdat elk record goed is.
Nadat ik het record heb gebruikt, verwijder ik hem met "DELETE FROM Tabelnaam WHERE Kolom1 = Conditie1 AND Kolom2 = Conditie2".
Tussen de select en delete queries insert ik records in andere tabellen met "INSERT IGNORE INTO Tabelnaam" en dan de kolommen erachteraan.
Ik heb de laatste query geprobeerd te optimaliseren met m.b.v. een transactie te openen en dan eerst een select en vervolgens een gewone insert te doen zonder gebruik te maken van ignore, maar dat leverde geen snelheidswinst op.
Losse query's zijn niet traag o.i.d. Een losse query duurt minder dan 0,001 seconde.
Verder heb ik nog geprobeerd om m.b.v. parameters het e.e.a. te versnellen, maar dat is niet gelukt:
key_buffer_size: Geen merkbaar effect omdat ik waarschijnlijk zonder WHERE een record opvraag.
table_cache: Staat nu op 256, maar ook lijkt dat weinig tot geen verschil te geven t.o. de oude waarde.
tmp_table_size: Heeft ook geen merkbaar effect.
Hebben jullie nog suggesties om bepaalde parameters of zelfs query's aan te passen?
Speel ook Balls Connect en Repeat