Tables MySQL en InnoDB plutôt que MyISAM ?

Tables MySQL en InnoDB plutôt que MyISAM ?

par Séverin Terrier,
Nombre de réponses : 15
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour à tou(te)s,

Pour celles et ceux qui testent (ou exploitent) Moodle 2.0, en utilisant MySQL comme base de données (ce qui est le cas de l'immense majorité des utilisateurs de Moodle), vous avez certainement du lire qu'il est fortement recommandé d'utiliser le moteur de stockage InnoDB plutôt que MyISAM.

L'un comme l'autre ont leurs avantages et inconvénients !

Est-ce que certains parmis vous seraient spécialistes des bases de données, et pourraient nous donner plus d'informations à ce propos (voire compléter la documentation sur ce point) ?

Certains ont-ils déjà migré, et pourraient nous faire un retour d'expérience ?

Par ailleurs, pour ceux qui exploitent Moodle 1.9, il semblerait que ce soit la seule solution pour éviter les bogues comme MDL-14100 !

Je pense que ceci est lié au fait qu'InnoDB verrouille des enregistrements, alors que MyISAM verrouille des tables entières, ce qui peut vite poser problème lorsque plusieurs opérations (notamment d'écriture) sont à effectuer en même temps... cela doit donc être d'autant plus vrai que le site Moodle est sollicité !

Merci d'avance pour vos retours d'expérience.

Séverin

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Hello Séverin,

Je ne suis pas un spécialiste des BDD, loin de là. J'ai une question à poser. Quand je fais une installation d'un moodle en local, je commence par créer une base de données mySql avec phpMyAdmin. Quand on crée la base, je ne vois pas de paramètre pour choisir entre MyISAM et InnoDB.

Quand j'installe un moodle 1.9, l'installation de moodle me crée des tables au format MyISAM; quand j'installe un moodle 2.0, il me crée des tables au format InnoDB... sans me demander mon avis. C'est donc automatique ? Et il faut juste laisser faire l'installation ? pensif

Joseph

Annexe 09-12-2010 23-26-06.jpg
Moyenne des évaluations Utile (1)
En réponse à Joseph Rézeau

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par jean-paul KIRKBRIDE,

Si au niveau de l'installe Moodle 2.0, c'est le format Innodb qui est choisi, surtout ne le change pas... c'est sand doute que le code utilise les avantages d'InnoDB !

 

Les différences MyISAM et InoDB ?

ce que j'en sais (peu de chose en fait) :

MyISAM plus rapide en lecture, Innodb plus stable.

ici un peu de lecture :

http://www.tux-planet.fr/mysql-les-principales-differences-entre-myisam-et-innodb/

http://mysql.ifrance.com/showthread.php?t=1711

 

 

 

 

>> en php pour convertir une BDD MyISAM en InoDB : (faire des sauvegardes AVANT !)  :

...connexion à la bdd...

$query = "SHOW TABLE STATUS";
$result = mysql_query($query);
while($val=mysql_fetch_array($result)) {
echo "<br>".$val["Name"]." - ".$val["Engine"];
if(strtoupper($val["Engine"])=='MYISAM') {
$query_innodb = "ALTER TABLE ".$val["Name"] ." ENGINE = innodb";
$result = mysql_query($query_innodb);

if($result) { echo("convertion OK."); }

}
}

?>

Moyenne des évaluations Utile (2)
En réponse à jean-paul KIRKBRIDE

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

pour (ne pas) répondre à Joseph, je dirais simplement que je n'ai pas encore pris le temps de m'intéresser de suffisamment près à Moodle 2.0, hormis la lecture de documentation et messages de forums, mais pas d'installation...

Jean-Paul : j'avais déjà, au cours de mes recherches, vu ces pages (entre autre). Mais, à mon sens, l'information donnée reste peu utile, et détachée du contexte d'utilisation (ne tenant pas compte de la montée en charge notamment).

Concernant http://www.tux-planet.fr/mysql-les-principales-differences-entre-myisam-et-innodb/ je trouve surtout intéressant le commentaire de "fruey (Let's Have It)" , le 18 Décembre 2007 à 14:13 (attention, le commentaire est au dessus de l'avatar !).

Sinon, je trouve intéressant le message http://www.noidea.ca/2009/01/13/myisam-ou-innodb/ ainsi que dans http://www.siteduzero.com/forum-83-454455-p1-mysql-quel-moteur-choisir.html celui de "Lord Casque Noir" posté le 26/10/2009 à 18:04:34.

Reste à avancer sur ce dossier...

En réponse à Séverin Terrier

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par jean-paul KIRKBRIDE,

effectivement, je réalise que ma réponse n'apporte pas grand chose !

merci pour tes liens.

En réponse à Joseph Rézeau

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Dominique Bouillet,

Bonjour Joseph,

Le choix ne se fait pas au niveau de la base mais pour chaque table. En SQL, on peut ajouter "ENGINE =  INNODB" avec les commandes create et alter.

Avec phpMyadmin, l'onglet Opérations permet pour chaque table de choisir le "Moteur de stockage" parmi une liste déroulante des options supportées.

Domy

Moyenne des évaluations Utile (1)
En réponse à Séverin Terrier

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Patrick Lemaire,
Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour à tou(te)s,

Merci d'ouvrir ce sujet intéressant !

Mon hypothèse est que Moodle gagnera en stabilité à passer en InnoDB pour les mécanismes d'écriture moins paralysant décrits ailleurs. Je pense que d'autres applis de la même veine, voire même équipe, sont déjà sur ce pré-requis (ex : Mahara). L'harmonisation des pré-requis n'est pas une mauvaise chose...

Par contre, je m'inquiète pour la migration 1.9 -> 2.0 !?! Est-ce que la mise à jour bascule le moteur de toutes les tables automatiquement ?

A bientôt,

En réponse à Patrick Lemaire

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour,

non, pas automatiquement.

Mais la documentation de migration vers InnoDB indique des outils pour migrer facilement clin d’œil

En réponse à Séverin Terrier

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Daniel Méthot,
Avatar Moodleurs particulièrement utiles

C'est en effet assez facile.

Ci-joint cadeau à la communauté.

Daniel

En réponse à Daniel Méthot

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Pascal Maury,
Avatar Développeurs de plugins

Bonjour,

Après avoir mis à jour Moodle 1.9 vers 2.1 (pour tester), je m'apprête à convertir mes tables MyISAM en InnoDB.

Or dans la doc, je ne comprends pas la ligne : "et le fichier config.php doit n'avoir qu'une seule instance Moodle, mais il n'y a aucun problème de timeout) ".

Qu'est-ce que cela veut dire :"n'avoir qu'une seule instance Moodle" dans le fichier de conf ?

En réponse à Pascal Maury

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Pascal,

Je crois que c'est pour les (rares) cas ou certains feintent, en utilisant un fichier config.php unique, mais qui permet de gérer plusieurs Moodle différents, en s'appuyant sur des paramètres qui varient clin d’œil

Donc, dans l'immense majorité des cas, cela ne doit pas poser de problème sourire

En réponse à Séverin Terrier

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Pascal Maury,
Avatar Développeurs de plugins

C'est la seule chose qui pouvait correspondre mais je pensais cela tellement rare que je m'étonnais de le trouver là. Et je me suis dit qu'il s'agissait peut etre d'autre chose ...

Ceci dit, ca me rassure, car je serai peut etre amener à le faire. Donc si cela est évoqué dans la doc, je suppose que ca fonctionne plutôt bien ... !

Merci pour la réponse en tout cas..

---

En terme de retour d'expérience : j'ai lancé la migration de ma base à 17h. Et c'est toujours en cours 25' après.
Méthode : sudo -u www /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB
Voici les caractéristiques de ma base :
- Base Moodle 2.1 (anciennement 1.9 converti en 2.1)
- Taille : 3.2 Go
- Nombre de lignes : 22 millions
- 351 tables

Sans surprise la table de log avec ses 4 millions de lignes et ses 800 Mo prends le plus de temps (mais je n'ai pas calculé).

Je posterai un message qd ca sera fini...

En réponse à Pascal Maury

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Pascal Maury,
Avatar Développeurs de plugins

Alors, le procédé étant long, il s'est arrêté plusieurs fois car j'executais la commande "à distance". Impossible de dire combien de temps cela a pris mais il faut compter qq heures je pense !

Au final, la base fait maintenant 5,2 Go pour ~21,433,530 lignes.

Pascal

En réponse à Pascal Maury

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Pascal Maury,
Avatar Développeurs de plugins

Souhaitant refaire une migration 1.9 > 2.2 (cette fois-ci), j'ai dupliqué ma PF 1.9
Histoire de gagner du temps, je pensais lancer la conversion MyISAM => InnoDB la nuit dernière avant même de migrer.

Or je me suis aperçu que les outils en ligne de commandes présents dans Moodle 2 (dossier admin/cli) n'existent pas pour 1.9 (en tout cas, il n'y a pas de dossier admin/cli). Les outils sont-ils présents ailleurs pour 1.9 ?

La documentation n'est pas très claire concernant la version de Moodle (http://docs.moodle.org/19/fr/Migration_de_MyISAM_vers_InnoDB). Actuellement, toutes les solutions proposées semblent être réalisables sous Moodle 1.9 (ce qui n'est pas le cas). Et la doc n'évoque pas Moodle 2 !

J'attends un retour éventuel ici avant de MAJ la doc en ajoutant :

- run the innodb script as a webpage http://www.YOUR_MOODLE_SITE/admin/tool/innodb (v2.2.1 You should be logged into your Moodle site as an administrator - there might be timeout issues on large databases) In earlier versions of Moodle 2.x the script was at http://www.YOUR_MOODLE_SITE/admin/innodb.php
[ce texte (en gras) est déjà présent dans la version anglaise de la doc, je le mettrai dans la VF]

- use the CLI script in admin/cli/mysql_engine.php (requires access to shell, and the config.php must only have one moodle instance, but has no timeout issues) only for moodle 2.x or earlier
[ce te
xte (en gras) n'est présent nulle part, est-il correct ?] 


Idem pour la page http://docs.moodle.org/19/fr/Administration_en_ligne_de_commande qui devrait être "rangée" dans la doc moodle 2 car la ligne de commande n'existe pas pr moodle 1.x (la même page en anglais est rangée dans moodle 2.2 : http://docs.moodle.org/22/en/Administration_via_command_line)

Pascal

En réponse à Pascal Maury

Re: Tables MySQL en InnoDB plutôt que MyISAM ?

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Bonjour Pascal,

Merci pour tes retours sur la documentation. Comme tu le sais sans doute, des discussions ont eu lieu dernièrement, et il est prévu d'avoir bientôt une documentation séparée pour Moodle 2.x.

Quand est sera mise en place, il faudra l'alimenter avec (toutes) les informations utiles.

Puis il y aura effectivement un nettoyage de la version 1.9, pour en supprimer tout ce qui ne sera plus adapté...

En attendant, n'hésites pas à compléter la documentation, pour préciser les versions concernées par chaque élément clin d’œil

Séverin