Este tema describe la función Time to Live (TTL), que elimina automáticamente los datos caducados en PolarDB for MySQL.
Restricciones de versión
PolarDB for MySQL es compatible con las siguientes versiones del motor de base de datos:
MySQL 8.0.1 con la versión de revisión 8.0.1.1.49.2 o posterior.
MySQL 8.0.2 con la versión de revisión 8.0.2.2.29.2 o posterior.
Para obtener más información, consulte Kernel version description.
Notas
No es posible establecer propiedades TTL en tablas temporales, incluidas las tablas temporales locales y globales.
Las tablas con propiedades TTL no admiten funciones como global secondary index (GSI) ni partitioned table.
Otras tablas no pueden hacer referencia a una tabla con propiedades TTL como tabla principal dentro de una restricción de clave externa.
Una tabla con propiedades TTL no puede contener triggers.
Es posible que los datos caducados no se eliminen de inmediato. El momento de eliminación depende del ciclo de programación de la tarea de limpieza en segundo plano.
Al restaurar desde una tabla de base de datos o una copia de seguridad, establezca
loose_innodb_enable_ttl_purgeen OFF para deshabilitar la función que purga los datos caducados según el TTL. Esto se debe a que todos los datos podrían estar caducados después de la restauración.Una columna con propiedades TTL debe ser de tipo TIMESTAMP o DATETIME.
Los datos que elimina la función TTL no generan registros de binary logging. Por lo tanto, si utiliza binary logging para la sincronización de datos y una tabla de la base de datos de origen tiene habilitada esta función, pueden surgir conflictos de valores de clave en la base de datos secundaria.
Sintaxis
Utilice la instrucción CREATE TABLE o ALTER TABLE para configurar la función TTL en una tabla.
Crear una tabla con propiedades TTL
A continuación se muestran los métodos disponibles para crear una tabla con propiedades TTL:
En este ejemplo se crea una tabla llamada t1, donde created_at es la columna de tiempo de vida (TTL) que almacena la hora de creación de los datos. Establezca un valor de TTL basado en la columna created_at para determinar cuándo se eliminan los datos.
-
Establezca el tiempo de vida de
created_aten 100 segundos.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';NotaLa expresión
TTL='created_at@100'establece el tiempo de vida de las filas de la tabla en 100 segundos. Las filas que superan esta duración se marcan como caducadas y se eliminan posteriormente. -
Establezca el tiempo de vida de
created_aten 3 horas.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;NotaLa expresión
TTL ='created_at'+ INTERVAL 3 HOURdefine el tiempo de vida de las filas de la tabla en 3 horas. Los datos caducados se eliminan automáticamente.La configuración de TTL admite varias unidades de tiempo, como YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE y SECOND. Esta flexibilidad le permite elegir la unidad adecuada para gestionar los datos de forma eficiente según sus necesidades.
Modificar las propiedades TTL de una tabla
Utilice uno de los siguientes métodos para modificar las propiedades TTL de una tabla:
Los siguientes ejemplos modifican el tiempo de vida de la columna created_at en la tabla t1.
-
Modifique el tiempo de vida de
created_ata 10 000 segundos.ALTER TABLE `t1` TTL='created_at@10000';NotaEsta configuración garantiza que los datos se eliminen automáticamente 10 000 segundos después de su hora de creación, calculada a partir del valor del campo
created_at. -
Modifique el tiempo de vida de
created_ata 3 días.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;NotaEsto establece el tiempo de caducidad de los datos en 3 días a partir del valor de la columna
created_at. Los datos con más de 3 días de antigüedad se eliminan automáticamente.
Borrar las propiedades TTL de una tabla
ALTER TABLE t1 TTL = '';
Consultar las propiedades TTL de una tabla
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';
Utilice esta instrucción para comprobar si una tabla tiene propiedades TTL.
Descripción de parámetros
Los siguientes parámetros globales controlan la limpieza de los datos caducados:
Modifique los siguientes parámetros globales en la consola de PolarDB para controlar la limpieza de los datos caducados.
|
Nombre del parámetro |
Descripción |
|
loose_innodb_enable_ttl_purge |
Especifica si se habilita la limpieza de los datos caducados por TTL. Valores válidos:
Nota
Acceda a la consola para habilitar la función de limpieza de datos caducados por TTL. |
|
loose_innodb_ttl_min_interval |
Tiempo mínimo permitido al establecer el tiempo de caducidad de los datos. El valor predeterminado es 100 y la unidad predeterminada es el segundo. |
|
loose_innodb_ttl_purge_thread |
Número de hilos destinados a limpiar los datos caducados por TTL. Después de modificar este parámetro, restablezca el parámetro |
|
loose_innodb_ttl_cluster_index_purge_batch_size |
Si la columna TTL especificada no tiene índice, se examina la clave principal en busca de datos caducados por TTL. De forma predeterminada, se examinan 10 000 filas de la clave principal cada vez. |
|
loose_innodb_ttl_index_purge_batch_size |
Si la columna TTL especificada cuenta con un índice, se examina dicho índice en busca de datos caducados por TTL. De forma predeterminada, se examinan 500 filas de este índice cada vez. |
|
loose_innodb_ttl_purge_start_hour |
Hora de inicio de la tarea de limpieza de TTL. El valor predeterminado es 0 y el rango válido va de 0 a 23. Este valor no puede ser mayor que |
|
loose_innodb_ttl_purge_end_hour |
Hora de finalización de la tarea de limpieza de TTL. El valor predeterminado es 0 y el rango válido va de 0 a 23. Este valor no puede ser menor que |
|
loose_innodb_ttl_finished_job_expired_days |
Controla el tiempo de caducidad de los datos en la tabla |
Supervisión de TTL
El sistema recopila periódicamente información de ejecución de TTL. Consulte el estado de ejecución de las tareas de limpieza de TTL en la tabla del sistema mysql.ttl_job_history. En la siguiente tabla se describen los campos de esta tabla:
|
Nombre de la columna |
Descripción |
|
job_id |
Identificador de la tarea de limpieza de TTL, que suele ser una marca de tiempo en milisegundos. |
|
table_name |
Nombre de la tabla asociada a la tarea que ejecuta este trabajo de TTL. |
|
state |
Estado de ejecución de la tarea de TTL, que incluye pending, executing y completed. |
|
start_time |
Hora de inicio de la tarea. |
|
finished_time |
Hora de finalización de la tarea. |
|
expire_time |
Tiempo de caducidad de los datos que limpia esta tarea de TTL. |
|
scan_cost |
Tiempo empleado en examinar este lote. |
|
purge_cost |
Tiempo empleado en limpiar este lote. |
|
purge_rows |
Número de filas de datos que limpia esta tarea de TTL. |