Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2010, 12h57   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut insert explosif sur gros volume : Error writing file '/temp/MY8a585S' (Errcode: 28)

Bonjour à toute la communauté.
J'ai un problème pour lequel je ne suis apparemment pas de taille aujourd'hui.

Je dois faire un insert d'environ 1 million de ligne dans une table.
La table destination à 37 champs, la table source aussi (bien remplis).
C'est une table temporaire alimentée par un fichier texte. Elle comporte de nombreux doublons que je dois éliminer à l'insert. Pour cela, j'utilise un group by dans ma requête. Cette syntaxe convient au résultat attendu :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
INSERT INTO table2
SELECT 
max(champ1)
,champ2
,champ3
,...
champ37
FROM table1
GROUP BY
,champ2
,champ3
,...
champ37
;
ça tourne mais ça explose sytématiquement avec comme message :
ERROR 3 (HY000): Error writing file '/temp/MY8a585S' (Errcode: 28)
ça explose aussi à partir d'environ 12000 lignes traitées (essais avec des clauses d'intervalles).

Je cherche donc des pistes de résolution ou pourquoi pas la solution à ce problème. j'ai l'impression que ça vient plutôt de quelque variable système mal ajustée, mais là j'en m'en remets voter expérience.

Merci d'avance si quelqu'un à une idée pour moi, je suis bien bloqué là.


Pour ma config :
mysql 5.1.34
installé sur un NAS synology ds207+ : 500 mghz, 128 mo de ram
j'ai conscience que c'est léger mais je n'ai pas le choix des armes ici.
o dako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h45   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 945
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 945
Points : 18 140
Points : 18 140
Envoyer un message via MSN à CinePhil
As-tu indexé ta table ?
Un index multi-colonnes pourrait aider au regroupement et donc à la rapidité de l'opération. Par contre, la construction de l'index risque d'être longue.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h48   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 932
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 932
Points : 17 736
Points : 17 736
avec 128 mo de RAM vous n'irez jamais au delà de quelques lignes à insérer simultanément.

Un SGBDR consomme BEAUCOUP de RAM car les données doivent être TOUTES en mémoire pour traiter la requête !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 17h16   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 0
Points : 0
Merci à tous les 2.
Pour vous répondre :

@ CinePhil : Oui, mes 2 tables sont bien indexées.

@ SQLpro : malgré ma limitation matérielle, n'est-il pas possible d'aller au bout ?
Je réalise un T0 sur cette base, le facteur temps d'exécution/perf n'est pas primordial pour moi à ce stade du développement. Mais l'insertion des données, oui. Et évidemment, si je peux me tirer de là en évitant environ 200 requêtes, ce serait mieux pour moi

Je suis actuellement une piste : changer le dossier de destination de la variable tmpdir. A votre avis ?
Je ne testerai que demain matin, pas possible pour le moment.

A plus, et merci d'avoir répondu
o dako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 14h59   #5
Invité de passage
 
Inscription : novembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 3
Points : 0
Points : 0
Des nouvelles :
changer tmpdir, ça fonctionne.
J'ai édité /etc/my.cnf
pour changer le répertoire de destination que cible cette variable.
J'ai ensuite arrêté et redémarré Mysql.

Et là, mes requêtes vont au bout.
Bon, évidemment, ce n'est pas une solution de production, ça rame beaucoup trop, mais ça me permet de mener au bout mon T0.

Le répertoire initial était monté sur un lecteur trop exigu, en le "déplaçant", je lui ai donné de l'air.

A plus pour de nouvelles zaventures.
o dako est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h31.


 
 
 
 
Partenaires

Hébergement Web