Le partitionnement courant des tables dans PolarDB-X répartit automatiquement l'ensemble des tables d'une base de données logique sur plusieurs nœuds de données (DN). Ce mécanisme élimine les goulots d'étranglement liés aux ressources d'un serveur unique et équilibre la charge de stockage ainsi que les requêtes à travers le cluster.
Activez cette fonctionnalité en définissant DEFAULT_SINGLE='on' lors de la création d'une base de données en mode AUTO.
Fonctionnement
PolarDB-X détermine la distribution de chaque table selon qu'une définition de partition MySQL est spécifiée ou non au moment de sa création :
| Type de table | Définition de partition | Comportement de distribution |
|---|---|---|
| Non partitionnée | Non spécifiée | Répartition aléatoire sur les DN pour équilibrer les charges |
| Partitionnée | Spécifiée explicitement | Répartition uniforme sur les DN |
Les tables non partitionnées étant attribuées aléatoirement, le volume de données par shard peut varier. Par conséquent, l'espace de stockage utilisé sur chaque DN est susceptible de différer.
Cas d'usage
Le partitionnement courant des tables est particulièrement adapté lorsque :
Votre application exploite un grand nombre de bases de données et de tables.
La majorité des tables entretiennent peu ou aucune relation JOIN entre elles.
Si vos tables nécessitent des JOIN fréquents entre elles, consultez la section Limitations avant d'activer cette fonctionnalité.
Créer une base de données avec partitionnement courant des tables
Pour activer le partitionnement courant des tables, créez une base de données en mode AUTO avec le paramètre DEFAULT_SINGLE='on' :
CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
Lorsque vous créez une base de données en mode AUTO depuis la console PolarDB, l'instruction SQL générée par le système n'inclut pas DEFAULT_SINGLE='on'. Pour utiliser le partitionnement courant des tables, exécutez manuellement la commande ci-dessus. Pour plus de détails, reportez-vous à CREATE DATABASE.
Paramètres de création de la base de données
| Paramètre | Description | Valeur |
|---|---|---|
MODE |
Définit le mode de la base de données. Obligatoire pour un fonctionnement distribué. | 'auto' |
DEFAULT_SINGLE |
Active le partitionnement courant des tables. Si ce paramètre est réglé sur 'on', toutes les tables sans définition de partition explicite sont automatiquement distribuées sur les DN. |
'on' (activation) |
Vérifiez que la base de données a été créée correctement :
mysql> SHOW CREATE DATABASE autodb1;
Résultat attendu :
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1 | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
Créer des tables non partitionnées
Créez des tables dans autodb1 sans spécifier de schéma de partitionnement. PolarDB-X se charge alors de les partitionner et de les distribuer automatiquement sur les DN.
CREATE TABLE sin_t1(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t2(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t3(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
CREATE TABLE sin_t4(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime,
primary key(id)
);
Vérifier la distribution des tables
Utilisez la commande SHOW TOPOLOGY FROM <table_name> pour identifier le DN auquel chaque table a été assignée.
sin_t1 :
SHOW TOPOLOGY FROM sin_t1\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t2 :
SHOW TOPOLOGY FROM sin_t2\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
sin_t3 :
SHOW TOPOLOGY FROM sin_t3\G
ID: 0
GROUP_NAME: AUTODB1_P00000_GROUP
TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00000
DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default
sin_t4 :
SHOW TOPOLOGY FROM sin_t4\G
ID: 0
GROUP_NAME: AUTODB1_P00001_GROUP
TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
PHY_DB_NAME: autodb1_p00001
DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default
Ces résultats confirment que PolarDB-X a réparti les quatre tables sur deux DN : sin_t1 et sin_t3 se trouvent sur polardbx-storage-0-master, tandis que sin_t2 et sin_t4 résident sur polardbx-storage-1-master.
Limitations
Performances des JOIN
Avec le partitionnement courant des tables, les opérations JOIN impliquant des tables partitionnées peuvent s'avérer plus lentes. Étant donné que les données sont dispersées sur différents DN, il n'est plus toujours possible de déléguer efficacement l'exécution des JOIN aux DN individuels.
Pour atténuer cet impact, privilégiez le partitionnement courant pour les tables ayant peu ou pas de relations JOIN.
Distribution inégale du stockage
La distribution aléatoire des tables non partitionnées entraîne une variation du volume de données par shard. De ce fait, l'espace de stockage consommé sur chaque DN peut présenter des disparités.