Partitionnement MySQL : Optimiser les performances des tables
Avec le temps, de nombreuses tables MySQL deviennent volumineuses, ce qui rallonge les temps de recherche, même avec des index bien choisis. Une solution efficace à ce problème est le partitionnement.
Partitionnement MySQL : Qu’est-ce que c’est ?
Imaginez une bibliothèque avec toutes les informations dans un seul livre. Malgré un bon index, la recherche reste lente.
Si le livre est divisé en plusieurs tomes et que vous ne cherchez que dans un seul, l’index devient beaucoup plus rapide. Le partitionnement MySQL fonctionne de la même manière, mais pour les tables.
Cet article se concentre sur le partitionnement horizontal (par ligne).
Quand et comment appliquer le partitionnement à vos tables ?
Pour vérifier si le partitionnement est activé :
Vous devez voir “partition” avec le statut ACTIVE. Certaines tables ne peuvent pas être partitionnées :
- Tables avec un index full text
- Tables avec des clés étrangères
- Tables qui sont des références de clés étrangères pour d’autres tables
Choisir la clé de partitionnement
La clé de partitionnement doit respecter ces conditions :
- Être numérique
- Faire partie de la clé primaire
Types de Partitionnement MySQL
Partitionnement par Range
Les lignes sont réparties selon des zones définies. On ne peut pas utiliser directement de dates, mais des fonctions MySQL comme YEAR sont autorisées.
Partitionnement par List
Les valeurs de la clé de partitionnement doivent correspondre à une des valeurs définies dans la liste. Si la valeur n’est présente dans aucune liste, alors l’insertion est perdue.
Il n’y a pas de valeur de catch !
Cette methode s’adapte bien pour des clefs fixes et bien définies.
Partitionnement par 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 être identique.
L’expression de la partition est calculée par valeurDuHash % nombreDePartitions.
Partitionnement par Key
La clef n’est pas obligatoirement numérique, key utilise une fonction de hash propre a mysql (basé sur password).
Partitionnement Linear
Le calcul de la partition se fait différemment via la fonction suivante :
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 des partitions
Le pruning des partitions permet à MySQL d’ignorer certaines partitions lors de l’exécution d’une requête, réduisant ainsi le volume de données à traiter. Seulement les partitions utiles seront lues. Cela se traduit par un temps d’exécution plus rapide et une utilisation mémoire optimisée.
Actions sur les partitions
Optimisation des partitions
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 des partitions
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