Tous les produits
Search
Centre de documentation

ApsaraDB for OceanBase (Deprecated):Définir des stratégies de partitionnement

Dernière mise à jour :Aug 10, 2026

Cette rubrique explique comment définir une stratégie de création et de suppression de partitions.

Stratégies de création de partitions

Important
  • La création de partitions pour une table appartenant à un groupe de tables peut échouer ou perturber l'équilibrage de charge. Soyez prudent lorsque vous décidez de configurer une stratégie de création de partitions pour ce type de table.

  • La création de partitions pour une table au sein d'un groupe de tables peut invalider ce dernier, car les tables d'un même groupe doivent posséder le même nombre de partitions.

Stratégie de création de partitions personnalisée

Vous pouvez créer une stratégie de création de partitions personnalisée afin de générer la limite supérieure d'une partition à l'aide d'une expression SQL. Procédez comme suit :

  1. Utilisez une expression SQL pour obtenir l'heure de référence, qui correspond à l'heure de début de la création de partitions.

    Remarque

    Pour utiliser l'heure d'exécution du plan de partitionnement comme heure de début, utilisez la fonction now() ou SYSDATE.

  2. Définissez l'intervalle de temps pour la génération des partitions : le plan de partitionnement générera les partitions en fonction de l'intervalle spécifié. Après avoir saisi un intervalle dans le champ Interval , OceanBase Developer Center (ODC) utilise l'expression ${INTERVAL} pour référencer cet intervalle et l'ajoute à l'expression SQL générée à l'étape 1.

  3. Générez l'expression de partitionnement correspondant au type de données de la clé de partitionnement : convertissez l'expression SQL de type temporel obtenue après les étapes 1 et 2 dans le type réel de la clé de partitionnement. Si la clé de partitionnement et l'expression SQL sont du même type, ignorez cette étape.

Vous pouvez référencer des variables dans les stratégies de création de partitions personnalisées. Le tableau suivant répertorie les expressions prises en charge.

|
Expression
|
Description
|
Exemple
| | --- | --- | --- | |
INTERVAL
|
L'intervalle de temps pour la génération des partitions. ODC remplacera cette variable par la valeur du champ **Interval ** dans la colonne **Rule ** de la section **Creation Rule **.
|
${INTERVAL}
|

En général, si vous optez pour une stratégie de création de partitions personnalisée, les partitions sont générées sur la base d'un type temporel pour une clé de partitionnement qui n'est pas de type temporel. Les tableaux de référence rapide suivants vous aident à rédiger rapidement l'expression SQL correcte.

Expressions pour générer les limites supérieures des partitions en mode MySQL

Exemple d'expression de partitionnement

Description

Intervalle de temps

Expression SQL pour calculer les limites supérieures des partitions

... values less than ('2024')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y''')

... values less than ('202401')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y01''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y%m''')

... values less than ('2024-01')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y-%m''')

... values less than ('2024/01')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y/%m''')

... values less than ('20240101')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y0101''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y%m01''')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '''%Y%m%d''')

... values less than ('2024-01-01')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01-01''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y-%m-01''')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '''%Y-%m-%d''')

... values less than ('2024/01/01')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01/01''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y/%m/01''')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '''%Y/%m/%d''')

... values less than ('2024-01-01 00:00:00')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01-01 00:00:00''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y-%m-01 00:00:00''')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '''%Y-%m-%d 00:00:00''')

... values less than ('2024/01/01 00:00:00')

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01/01 00:00:00''')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '''%Y/%m/01 00:00:00''')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '''%Y/%m/%d 00:00:00''')

... values less than (2024)

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '%Y')

... values less than (202401)

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '%Y01')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '%Y%m')

... values less than (20240101)

Générer par année

1

date_format(now() + interval ${INTERVAL} year, '%Y0101')

Générer par mois

1

date_format(now() + interval ${INTERVAL} month, '%Y%m01')

Générer par jour

1

date_format(now() + interval ${INTERVAL} day, '%Y%m%d')

... values less than (1709222400)

Remarque : horodatage Unix

Générer par année

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} year, '%Y-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Générer par mois

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} month, '%Y-%m-01 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Générer par jour

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} day, '%Y-%m-%d 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Expressions pour générer les limites supérieures des partitions en mode Oracle

Exemple d'expression de partitionnement

Description

Intervalle de temps

Expression SQL pour calculer les limites supérieures des partitions

... values less than ('2024')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY''')

... values less than ('202401')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM''')

... values less than ('2024-01')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM''')

... values less than ('2024/01')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM''')

... values less than ('20240101')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01""01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM"01"''')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMMDD''')

... values less than ('2024-01-01')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01"''')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD''')

... values less than ('2024/01/01')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01"''')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD''')

... values less than ('2024-01-01 00:00:00')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01 00:00:00"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01 00:00:00"''')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD "00:00:00"''')

... values less than ('2024/01/01 00:00:00')

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01 00:00:00"''')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01 00:00:00"''')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD "00:00:00"''')

... values less than (2024)

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY')

... values less than (202401)

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01"')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM')

... values less than (20240101)

Générer par année

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01""01"')

Générer par mois

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM"01"')

Générer par jour

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMMDD')

Stratégie de création par incrémentation séquentielle

  • La méthode Sequentially Increase s'applique uniquement à une clé de partitionnement de type temporel.

  • L'heure de référence pour cette méthode peut être l'heure actuelle ou une heure spécifiée. Les partitions sont générées séquentiellement en fonction de l'intervalle de temps indiqué.

Stratégies de génération des noms de partitions

Vous pouvez utiliser différentes stratégies pour générer des noms de partitions liés au contenu des partitions.

Actuellement, deux stratégies de génération de noms de partitions sont proposées :

  • Stratégie préfixe + suffixe : un nom de partition généré selon cette stratégie comprend un préfixe et un suffixe. Le préfixe est une constante de chaîne de caractères, tandis que le suffixe fait référence à la valeur de l'expression SQL de la clé de partitionnement de type temporel spécifiée. Vous pouvez modifier le préfixe, le suffixe, l'heure de référence et le format de sortie pour générer différents noms de partitions.

    image

    Important

    Cette stratégie prend effet uniquement pour les clés de partitionnement de type temporel. Étant donné que la clé de partitionnement référencée par le suffixe est de type temporel, sa valeur d'expression SQL peut être convertie en valeur temporelle, puis mise en forme et affichée comme suffixe du nom de la partition.

  • Stratégie personnalisée : cette stratégie utilise une expression de nommage pour générer des noms de partitions conformes aux exigences de l'utilisateur. La valeur de l'expression SQL de la clé de partitionnement peut être référencée dans l'expression de nommage via ${partitioning key}.

    image

Les tableaux de référence rapide suivants répertorient les expressions courantes fournies par ODC pour générer des noms de partitions. Les clés de partitionnement indiquées dans les tableaux doivent être de type numérique ou caractère.

Expressions pour générer des noms de partitions en mode MySQL

Exemple d'expression de partitionnement

Expression de nommage

Aperçu

... values less than (..., 2024, ...)

concat('P', ${partitioning key})

P2024

... values less than (..., '2024', ...)

... values less than (..., 202401, ...)

concat('P', ${partitioning key})

P202401

... values less than (..., '202401', ...)

... values less than (..., '2024-01', ...)

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y_%m')

P2024_01

... values less than (..., '2024/01', ...)

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y_%m')

P2024_01

... values less than (..., 20240101, ...)

concat('P', ${partitioning key})

P20240101

... values less than (..., '20240101', ...)

... values less than (..., '2024-01-01', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024-01-01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., 1709222400, ...)

Remarque : horodatage, en secondes

date_format(from_unixtime(${partitioning key}), 'P%Y')

P2024

date_format(from_unixtime(${partitioning key}), 'P%Y%m')

P202401

date_format(from_unixtime(${partitioning key}), 'P%Y_%m')

P2024_01

date_format(from_unixtime(${partitioning key}), 'P%Y%m%d')

P20240101

date_format(from_unixtime(${partitioning key}), 'P%Y_%m_%d')

P2024_01_01

Expressions pour générer des noms de partitions en mode Oracle

Exemple d'expression de partitionnement

Expression de nommage

Aperçu

... values less than (..., 2024, ...)

concat('P', ${partitioning key})

P2024

... values less than (..., '2024', ...)

... values less than (..., 202401, ...)

concat('P', ${partitioning key})

P202401

... values less than (..., '202401', ...)

... values less than (..., '2024-01', ...)

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '-01'), 'YYYY-MM-DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '-01'), 'YYYY-MM-DD'), '"P"YYYY_MM')

P2024_01

... values less than (..., '2024/01', ...)

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '/01'), 'YYYY/MM/DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${partitioning key}, '/01'), 'YYYY/MM/DD'), '"P"YYYY_MM')

P2024_01

... values less than (..., 20240101, ...)

concat('P', ${partitioning key})

P20240101

... values less than (..., '20240101', ...)

... values less than (..., '2024-01-01', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024/01/01', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024-01-01 00:00:00', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

... values less than (..., '2024/01/01 00:00:00', ...)

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${partitioning key}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

Stratégie de suppression de partitions

Important
  • La suppression de partitions d'une table contenant un index global invalidera cet index. Soyez prudent. Le choix de reconstruire l'index global peut entraîner des problèmes opérationnels en raison de la durée du processus ou de pannes liées à des échecs de reconstruction.

  • L'option de reconstruction des index globaux n'est disponible qu'en mode Oracle. En mode MySQL, les index globaux sont reconstruits par défaut.

  • Lorsque vous définissez une stratégie de suppression de partitions, vous devez tenir compte de l'impact des partitions précréées et éviter de supprimer par erreur des partitions historiques. Par exemple, supposons que des partitions soient générées mensuellement pour une table. Pour conserver les partitions générées au cours des 12 derniers mois, définissez Number of Reserved Partitions sur 12. Si la stratégie de création de partitions précrée des partitions pour trois mois, seules les partitions créées au cours des neuf derniers mois et celles des trois prochains mois seront effectivement conservées.

Une stratégie de suppression de partitions s'applique aux partitions existantes. Actuellement, une seule stratégie de suppression est prise en charge : elle conserve les N dernières partitions et supprime les autres.

Voici un exemple :

  1. Créez une table nommée order contenant les partitions p2023_01 et p2023_02.

    CREATE TABLE `order` (
    `time` date NOT NULL,
    `parti_key` int(11),
     `name` varchar(120) DEFAULT NULL
    ) partition by range columns(time, parti_key)
    (partition p2023_01 values less than ('2023-01-01', 20230101),
    partition p2023_02 values less than ('2023-02-01', 20230201))
    
  2. Configurez une stratégie de suppression de partitions qui conserve la dernière partition pour la table order.

  3. L'instruction de suppression de partitions formée sur la base de la stratégie de suppression supprimera la partition p2023_01.

Considérations

  • La création de partitions pour une table appartenant à un groupe de tables peut échouer ou perturber l'équilibrage de charge. Soyez prudent lorsque vous décidez de configurer une stratégie de création de partitions pour ce type de table.

  • La création de partitions pour une table au sein d'un groupe de tables peut invalider ce dernier, car les tables d'un même groupe doivent posséder le même nombre de partitions.

  • La suppression de partitions d'une table contenant un index global invalidera cet index. Soyez prudent. Le choix de reconstruire l'index global peut entraîner des problèmes opérationnels en raison de la durée du processus ou de pannes liées à des échecs de reconstruction.

  • L'option de reconstruction des index globaux n'est disponible qu'en mode Oracle. En mode MySQL, les index globaux sont reconstruits par défaut.

Références