Hallo allemaal,
Voor testdoeleinden wil ik een "grote" database(+/- 1.9 miljoen records) importeren via een programma wat ik zelf geschreven heb in vb6. De sql file is +/- 200mb. Als ik m'n programma de sql file laat verwerken zonder dat ik de insert statements echt doorstuur naar de server heeft hij in 50 seconden alle 1.9mil records verwerkt ( dus alle query's stuk voor stuk uit de sql gesplitstmaar niet verstuurd naar de server ). Dit is een prima acceptabele snelheid. Maar wanneer ik ze dus werkelijk op de database probeer uit te voeren gaat dit "enorm" traag. Ik stuur elke query dmv de mysql ODBC driver en het execute commando naar de server.
Ik dacht eerst dat het aan mijn programma lag dus daarom heb ik het geprobeerd om het zonder het werkelijk door te sturen te verwerken en dat ging behoorlijk snel. Dus daarom heb ik als test verschillende methodes geprobeerd om het te importeren, dus via de mysql prompt de sql file in te laden, dit werkt wel maar gaat ook enorm traag, bigdump geprobeerd maar die houd er na enkele 1000-en statements mee op ook al staat de sql file lokaal zodat je niet met post limit zit, navicat werkt wel en gaat al wel sneller(1800 queries per minuut) als de rest maar is nogsteeds niet zoals ik het verwacht.
In mijn programma word na elke gesplitste query de query verstuurt omdat de odbc 3.51 niet multiple query's ondersteund. Schijnbaar kan de laatste versie van de odbc driver ( v5.nogwat ) dit wel maar deze is nog in beta versie dus ik weet niet of het verstandig is om deze nu al te gebruiken.
Nogwel een grappige toevoeging is dat wanneer ik een CSV file waar precies hetzelfde instaat als in de sql file via navicat erheen probeer te sturen hij ineens wel 90.000 records per minuut kan verzenden naar de server terwijl een sql(kant en klare commando's) file via navicat in vergelijking enorm traag is.
Dus heeft iemand dus nog een idee waarom het zo traag gaat en wat ik er aan kan doen? Ligt het aan de manier van versturen ( enkele query per keer ) of ligt het aan de driver(ODBC 3.51) die gebruikt word om het te versturen of misschien heel iets anders?
Voor testdoeleinden wil ik een "grote" database(+/- 1.9 miljoen records) importeren via een programma wat ik zelf geschreven heb in vb6. De sql file is +/- 200mb. Als ik m'n programma de sql file laat verwerken zonder dat ik de insert statements echt doorstuur naar de server heeft hij in 50 seconden alle 1.9mil records verwerkt ( dus alle query's stuk voor stuk uit de sql gesplitstmaar niet verstuurd naar de server ). Dit is een prima acceptabele snelheid. Maar wanneer ik ze dus werkelijk op de database probeer uit te voeren gaat dit "enorm" traag. Ik stuur elke query dmv de mysql ODBC driver en het execute commando naar de server.
Ik dacht eerst dat het aan mijn programma lag dus daarom heb ik het geprobeerd om het zonder het werkelijk door te sturen te verwerken en dat ging behoorlijk snel. Dus daarom heb ik als test verschillende methodes geprobeerd om het te importeren, dus via de mysql prompt de sql file in te laden, dit werkt wel maar gaat ook enorm traag, bigdump geprobeerd maar die houd er na enkele 1000-en statements mee op ook al staat de sql file lokaal zodat je niet met post limit zit, navicat werkt wel en gaat al wel sneller(1800 queries per minuut) als de rest maar is nogsteeds niet zoals ik het verwacht.
In mijn programma word na elke gesplitste query de query verstuurt omdat de odbc 3.51 niet multiple query's ondersteund. Schijnbaar kan de laatste versie van de odbc driver ( v5.nogwat ) dit wel maar deze is nog in beta versie dus ik weet niet of het verstandig is om deze nu al te gebruiken.
Nogwel een grappige toevoeging is dat wanneer ik een CSV file waar precies hetzelfde instaat als in de sql file via navicat erheen probeer te sturen hij ineens wel 90.000 records per minuut kan verzenden naar de server terwijl een sql(kant en klare commando's) file via navicat in vergelijking enorm traag is.
Dus heeft iemand dus nog een idee waarom het zo traag gaat en wat ik er aan kan doen? Ligt het aan de manier van versturen ( enkele query per keer ) of ligt het aan de driver(ODBC 3.51) die gebruikt word om het te versturen of misschien heel iets anders?