J'ai un processus qui lit une ligne de données ligne par ligne, analyse et insère les données dans une table MyISAM. Au premier démarrage, ça va très vite, probablement autour de 1000 enregistrements par seconde. Au fur et à mesure que le temps avance, il devient de plus en plus lent. En ce moment, nous sommes à environ 1 rangs toutes les 180 secondes.Requête dans une boucle de plus en plus lente
La syntaxe générale de la fonction est la suivante:
function parse($file) {
$handle = fopen($file, 'r');
while (!feof($handle)) {
$line = fgets($fileHandle, 1000);
switch (substr($line, 0, 2)) { //gets record type
case '01' :
//parse the record
//escapes some strings with mysql_real_escape_string()
mysql_query('INSERT INTO table VALUES ($a, $b, $c...');
case '02' :
...
}
}
}
Le fichier en cours a analysé quelques millions d'enregistrements. Le serveur ne semble pas perdre d'espace mémoire. Est-ce que quelqu'un sait ce qui pourrait ralentir le processus?
Y a-t-il un index sur la table? La mise à jour de l'index pourrait être le coupable. Aussi, à quelle fréquence vous engagez-vous? –
Avez-vous une indexation sur 'table'? – bensiu
@bensiu & @Jim Garrison - Pourquoi auriez-vous besoin d'indexation pour INSERT? – FeRtoll