|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 3 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
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 ! |
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 932 ![]() |
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 * * * * * |
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 3 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 3 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com