Cette rubrique décrit la fonctionnalité Time to Live (TTL), qui supprime automatiquement les données expirées dans PolarDB for MySQL.
Restrictions de version
PolarDB for MySQL prend en charge les versions de moteur de base de données suivantes :
MySQL 8.0.1 avec une version de révision 8.0.1.1.49.2 ou ultérieure.
MySQL 8.0.2 avec une version de révision 8.0.2.2.29.2 ou ultérieure.
Pour plus d'informations, consultez Description des versions du noyau.
Remarques
Vous ne pouvez pas définir de propriétés TTL sur les tables temporaires (locales ou globales).
Les tables dotées de propriétés TTL ne prennent pas en charge certaines fonctionnalités, telles que l'index secondaire global (GSI) et les tables partitionnées.
Une table possédant des propriétés TTL ne peut pas servir de table principale dans une contrainte de clé étrangère.
Les tables configurées avec le TTL ne peuvent pas contenir de déclencheurs.
La suppression des données expirées n'est pas immédiate. Elle dépend du cycle de planification de la tâche de nettoyage en arrière-plan.
Lors d'une restauration à partir d'une table de base de données ou d'une sauvegarde, définissez
loose_innodb_enable_ttl_purgesur OFF pour désactiver la purge automatique des données basée sur le TTL. En effet, toutes les données risquent d'être considérées comme expirées après la restauration.La colonne utilisée pour le TTL doit être de type TIMESTAMP ou DATETIME.
Les données supprimées par la fonctionnalité TTL ne génèrent pas d'enregistrements dans les journaux binaires. Par conséquent, si vous utilisez ces journaux pour la synchronisation des données et que le TTL est activé sur une table de la base source, des conflits de valeurs clés peuvent survenir dans la base secondaire.
Syntaxe
Utilisez l'instruction CREATE TABLE ou ALTER TABLE pour configurer la fonctionnalité TTL sur une table.
Créer une table avec des propriétés TTL
Plusieurs méthodes permettent de créer une table intégrant des propriétés TTL :
Dans l'exemple ci-dessous, une table nommée t1 est créée. La colonne created_at sert de référence Time to Live (TTL) et stocke la date de création des données. Définissez une durée de vie basée sur cette colonne created_at pour déterminer le moment où les données seront supprimées.
-
Définir la durée de vie de
created_atà 100 secondes.CREATE TABLE `t1` ( `a` INT PRIMARY KEY, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY idx_created_at (`created_at`) )ENGINE=InnoDB TTL='created_at@100';RemarqueL'expression
TTL='created_at@100'fixe la durée de vie des lignes de la table à 100 secondes. Les lignes dépassant cette durée sont marquées comme expirées et seront supprimées ultérieurement. -
Définir la durée de vie de
created_atà 3 heures.CREATE TABLE `t1` ( `a` INT PRIMARY KEY, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY idx_created_at (`created_at`) )ENGINE=InnoDB TTL='created_at' + INTERVAL 3 HOUR;RemarqueL'expression
TTL ='created_at'+ INTERVAL 3 HOURétablit une durée de vie de 3 heures pour les lignes de la table. Les données expirées sont automatiquement supprimées.La configuration du TTL accepte diverses unités temporelles telles que YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE et SECOND. Cette flexibilité permet de choisir l'unité la plus adaptée pour gérer efficacement vos données selon vos besoins.
Modifier les propriétés TTL d'une table
Plusieurs méthodes permettent de modifier les propriétés TTL d'une table :
Les exemples suivants illustrent la modification de la durée de vie associée à la colonne created_at de la table t1.
-
Passer la durée de vie de
created_atà 10 000 secondes.ALTER TABLE `t1` TTL='created_at@10000';RemarqueCe paramétrage garantit la suppression automatique des données 10 000 secondes après leur création, selon la valeur indiquée dans le champ
created_at. -
Ajuster la durée de vie de
created_atà 3 jours.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;RemarqueCela fixe l'expiration des données à 3 jours après la valeur de la colonne
created_at. Toute donnée vieille de plus de 3 jours sera automatiquement supprimée.
Effacer les propriétés TTL d'une table
ALTER TABLE t1 TTL = '';
Interroger les propriétés TTL d'une table
SHOW CREATE TABLE `t1` FULL;
CREATE TABLE `t1` (
`a` INT PRIMARY KEY,
`created_at` TIMESTAMP DEFAULT
CURRENT_TIMESTAMP,
KEY idx_created_at (`created_at`)
)ENGINE=InnoDB TTL='created_at@259200';
Cette instruction permet de vérifier si une table possède des propriétés TTL.
Description des paramètres
Les paramètres globaux suivants contrôlent le nettoyage des données expirées :
Modifiez les paramètres globaux suivants depuis la console PolarDB afin de contrôler le nettoyage des données expirées.
|
Nom du paramètre |
Description |
|
loose_innodb_enable_ttl_purge |
Indique s'il faut activer le nettoyage des données expirées par TTL. Valeurs valides :
Remarque
Accédez à la console pour activer la fonctionnalité de nettoyage des données expirées par TTL. |
|
loose_innodb_ttl_min_interval |
Durée minimale autorisée lors de la définition du délai d'expiration des données. La valeur par défaut est 100, exprimée en secondes. |
|
loose_innodb_ttl_purge_thread |
Nombre de threads dédiés au nettoyage des données expirées par TTL. Après avoir modifié ce paramètre, réinitialisez le paramètre |
|
loose_innodb_ttl_cluster_index_purge_batch_size |
Si la colonne TTL spécifiée ne possède pas d'index, la clé primaire est analysée pour rechercher les données expirées. Le nombre de lignes analysées par lot via la clé primaire est de 10 000 par défaut. |
|
loose_innodb_ttl_index_purge_batch_size |
Lorsque la colonne TTL spécifiée est indexée, cet index est parcouru pour identifier les données expirées. Par défaut, 500 lignes sont analysées par lot sur cet index. |
|
loose_innodb_ttl_purge_start_hour |
Heure de début de la tâche de nettoyage TTL. La valeur par défaut est 0. La plage valide s'étend de 0 à 23. Cette valeur ne peut pas être supérieure à |
|
loose_innodb_ttl_purge_end_hour |
Heure de fin de la tâche de nettoyage TTL. La valeur par défaut est 0. La plage valide s'étend de 0 à 23. Cette valeur ne peut pas être inférieure à |
|
loose_innodb_ttl_finished_job_expired_days |
Contrôle la durée de conservation des données dans la table |
Surveillance du TTL
Le système collecte périodiquement des informations d'exécution relatives au TTL. Consultez la table système mysql.ttl_job_history pour vérifier l'état d'avancement des tâches de nettoyage. Le tableau suivant détaille les champs de cette table :
|
Nom de la colonne |
Description |
|
job_id |
Identifiant de la tâche de nettoyage TTL, correspondant généralement à un horodatage en millisecondes. |
|
table_name |
Nom de la table concernée par cette tâche TTL. |
|
state |
État d'exécution de la tâche TTL : en attente, en cours ou terminée. |
|
start_time |
Heure de démarrage de la tâche. |
|
finished_time |
Heure de fin de la tâche. |
|
expire_time |
Date d'expiration des données ciblées par cette tâche de nettoyage. |
|
scan_cost |
Temps écoulé pour analyser ce lot de données. |
|
purge_cost |
Durée nécessaire au nettoyage de ce lot. |
|
purge_rows |
Nombre de lignes supprimées lors de cette tâche TTL. |