Introduction au partionnement sous MySql
Avec le temps de nombreuses tables grossissent de manière assez forte. Cela entraine malgré des index correctement choisis des temps de recherche de plus en plus longs. Une solution à ce problème peut être d’utiliser le partitionnement.
Partitionnement introduction
Imaginez que la bibliothèque possède toutes les infos dans un seul et même livre, malgré un index dans celui-ci, chercher une information dedans est assez complexe. Maintenant si ce livre est découpé en plusieurs tomes et qu’il faut rechercher que dans un seul tome alors avec l’index cela sera beaucoup plus rapide. Le partitionnement c’est la même chose, mais pour une table. On parlera uniquement du partitionnement horizontal dans cet article, c’est-à-dire un partitionnement par ligne.
Est-ce utilisable ?
A priori oui, toutefois pour ne vérifier rien de plus simple
On doit avoir dans les résultats une ligne avec pour nom partition et status ACTIVE.
Certaines tables ne peuvent par contre pas être partitionnées :
- celle avec un index full text
- celle avec des clef etrangeres
- celle avec qui sont des references de clef etrangere d’autres tables
Contraintes sur la clef de partitionnement
La clef de partitionnement choisi devra obligatoirement :
- être numérique
- être comprise dans la clef primaire
Détails sur les types de partionnements
Range
Chaque ligne est insérée dans la bonne partition en fonction de sa valeur par rapport aux diverses zones prédéfinies. Ici on ne peut pas utiliser de date, toutefois rien n’empêche d’utiliser une fonction MYSQL comme YEAR.
List
Si la valeur de la clef de partitionnement n’est présente dans aucune liste alors l’insertion est perdue. Il n’y a pas de valeur de catch.
Hash
La valeur dans le HASH doit etre entière. On peut utiliser une fonction mysql mais pour une valeur précise la valeur de sortie doit etre identique.
La partition sélectionnée est égale a valeurDuHash % nombresDePartiontion.
Key
La clef n’est pas obligatoirement numérique, key utilise une fonction de hash propre a mysql (basé sur password).
Linear
Le calcul de la partition sélectionné change pour devenir :
Ou :
- num : nombre de partitions
- F(column_list) : Valeur de la fonction de hashage
- N : partition selectionné
Contrairement a ce que dit le nom la répartition n’est pas linéaire
Pruning
Selon les critères de la requête, la lecture ne se fait que sur un sous-ensemble de partitions. Le temps d’exécution s’en trouve réduit de même que l’utilisation mémoire.
Actions sur les partitions
Optimisation
Lors suppression de ligne ou changement de taille des colonnes, il peut y avoir une fragmentation des données on peu alors lancer une optimisation par partition.
Réparation
En cas d’erreur sur les données ou les index on peut reparer par partion
Suppression de partition
Grâce au partitionnement on peut supprimer des partitions directement. Ainsi la suppression d’un enregistrement par rapport a la date peut se faire rapidement même sur des gros volumes de données.
Ajout de partition
On peut aussi ajouter des partitions
Note : Sur du partitionnement par range on ne peut pas ajouter de participation apres notre partition fourre-tout (celle en MAXVALUE ). Il faudra dont la supprimer au préalable, puis ajouter la nouvelle et la recréer. Bien sûr, il faut faire cela avec quelle ne commence a se remplir.
Contraintes mémoires
Dans le cas des tables MyISAM, chaque partition utilise deux file descriptor qui doivent être ouvertes pour accéder aux données, et ceci est bien sûr par partition.
Voici un petit aperçu du partitionnement, de son utilisation pour augmenter les performances sur des tables assez volumineuse.
comments powered by Disqus