Bonjour,

Voila le probleme que je rencontre:
J'ai des tables assez enormes (plusieurs Go) avec des centaines d'INSERTs a la seconde dessus, sans compter quelques consultations en parallele.
Le probleme que j'ai est la modification de structure de la table online.
Je ne peux pas empecher les transactions de lire ou de mettre a jour les datas de ces tables alors que je suis en train de modifier la structure de cette table.
Or, tout le monde sait que, sur MySQL, la creation (ou la suppression) d'une ou plusieurs colonnes implique un lock exclusif de la table pendant que l'ALTER s'execute.
Je voulais tester la partie DDL Online de la version 5.6.10 de MySQL (avec moteur InnoDB 1.2.10), qui a l'air d'avoir ete ameliore de ce point de vue et autoriserait des mises a jour en parallele des updates, a l'aide de l'option LOCK de la commande ALTER.
http://dev.mysql.com/doc/refman/5.6/...dl-syntax.html
Quelques rapides tests sur une petite table confirment qu'effectivement, un insert peut etre fait alors que la commande d'ALTER est encore en cours d'execution.
D'autres tests sur une table un peu plus consequente de 5 Gb confirment la chose.
Par contre, il me semble detecter quelques problemes a tout ca:
1) ALTER TABLE creates a temporary table in the same directory as the original table (http://dev.mysql.com/doc/refman/5.6/...ary-files.html).
Alors que la documentation dit que les tables temporaires creees pas ALTER TABLE sont dans le meme repertoire que la table, si tmpdir n'est pas specifie dans le my.cnf (et que le serveur utilise donc /tmp sous Unix), je me prends une erreur. Il s'avere que mon file system /tmp est trop petit (512Mo) et ne peut pas abriter la copie de la table ou une partie de celle-ci. Si j'utilise un autre file system plus grand en le specifiant dans tmpdir, je n'ai plus l'erreur.
J'aurais tendance a en conclure que ce qui est indique dans la documentation ne reflete pas la realite, sinon qu'est-ce qui va se creer dans la zone temporaire tmpdir ?
J'ai essaye l'option ALGORITHM=INPLACE pour etre bien sur de tout faire pour eviter la copie temporaire de la table, mais le resultat est le meme.
2) Pour des questions de performances, nous avions dans l'idee de mettre cette zone temporaire sur du SSD. Par contre si toutes les tables temporaires creees par ALTER TABLE vont egalement sur ce SSD, ca ne va pas etre pratique, on a toutes les chances de saturer le SSD.
Y a t-il moyen de differencier les zones temporaires utilisees pour ALTER TABLE de celles utilisees pour les autres operations?

Si vous avez des commentaires, je suis preneur.
D'avance merci
DD