Este tópico descreve o recurso Time to Live (TTL), que exclui automaticamente dados expirados no PolarDB for MySQL.
Restrições de versão
O PolarDB for MySQL oferece suporte às seguintes versões do mecanismo de banco de dados:
MySQL 8.0.1 com versão de revisão 8.0.1.1.49.2 ou posterior.
MySQL 8.0.2 com versão de revisão 8.0.2.2.29.2 ou posterior.
Para obter mais informações, consulte Descrição da versão do kernel.
Observações
Não é possível definir propriedades de TTL em tabelas temporárias, incluindo tabelas temporárias locais e globais.
Tabelas com propriedades de TTL não oferecem suporte a recursos como índice secundário global (GSI) e tabela particionada.
Uma tabela com propriedades de TTL não pode ser referenciada por outras tabelas como tabela primária em uma restrição de chave estrangeira.
Tabelas com propriedades de TTL não podem conter triggers.
Dados expirados podem não ser excluídos imediatamente. O momento da exclusão depende do ciclo de agendamento da tarefa de limpeza em segundo plano.
Ao restaurar de uma tabela de banco de dados ou de um backup, defina
loose_innodb_enable_ttl_purgecomo OFF para desativar o recurso de purga de dados expirados com base no TTL. Isso é necessário porque todos os dados podem estar expirados após a restauração.Uma coluna com propriedades de TTL deve ser do tipo TIMESTAMP ou DATETIME.
Dados excluídos pelo recurso TTL não geram registros de log binário. Portanto, se você utilizar log binário para sincronização de dados e uma tabela no banco de dados source tiver o recurso TTL ativado, poderão ocorrer conflitos de valores-chave no banco de dados secundário.
Sintaxe
Utilize a instrução CREATE TABLE ou ALTER TABLE para configurar o recurso TTL em uma tabela.
Crie uma tabela com propriedades de TTL
Escolha um dos métodos abaixo para criar uma tabela com propriedades de TTL:
Nos exemplos a seguir, uma tabela chamada t1 é criada, onde created_at é a coluna de tempo de vida (TTL) que armazena o horário de criação dos dados. Defina um valor de TTL com base na coluna created_at para determinar quando os dados serão excluídos.
-
Defina o tempo de vida de
created_atcomo 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';NotaA expressão
TTL='created_at@100'define o tempo de vida das linhas da tabela como 100 segundos. Linhas mais antigas que essa duração são marcadas como expiradas e serão excluídas posteriormente. -
Defina o tempo de vida de
created_atcomo 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;NotaA expressão
TTL ='created_at'+ INTERVAL 3 HOURdefine o tempo de vida das linhas da tabela como 3 horas. Os dados expirados são excluídos automaticamente.A configuração de TTL aceita diversas unidades de tempo, como YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE e SECOND. Essa flexibilidade permite selecionar a unidade de tempo adequada para gerenciar dados de forma eficiente conforme suas necessidades.
Modifique as propriedades de TTL de uma tabela
Utilize um dos métodos a seguir para modificar as propriedades de TTL de uma tabela:
Os exemplos abaixo modificam o tempo de vida da coluna created_at na tabela t1.
-
Altere o tempo de vida de
created_atpara 10.000 segundos.ALTER TABLE `t1` TTL='created_at@10000';NotaEssa configuração garante que os dados sejam excluídos automaticamente 10.000 segundos após o horário de criação, com base no valor do campo
created_at. -
Altere o tempo de vida de
created_atpara 3 dias.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;NotaIsso define o tempo de expiração dos dados como 3 dias a partir do valor na coluna
created_at. Dados com mais de 3 dias são excluídos automaticamente.
Limpar as propriedades de TTL de uma tabela
ALTER TABLE t1 TTL = '';
Consultar as propriedades de TTL de uma tabela
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';
Use esta instrução para consultar se uma tabela possui propriedades de TTL.
Descrição dos parâmetros
Os seguintes parâmetros globais controlam a limpeza de dados expirados:
Modifique os parâmetros globais a seguir no console do PolarDB para controlar a limpeza de dados expirados.
|
Nome do parâmetro |
Descrição |
|
loose_innodb_enable_ttl_purge |
Especifica se a limpeza de dados expirados por TTL deve ser ativada. Valores válidos:
Nota
Acesse o console para ativar o recurso de limpeza de dados expirados por TTL. |
|
loose_innodb_ttl_min_interval |
Tempo mínimo permitido ao definir o tempo de expiração dos dados. O valor padrão é 100. A unidade padrão é segundo. |
|
loose_innodb_ttl_purge_thread |
Número de threads para limpeza de dados expirados por TTL. Após modificar este parâmetro, redefina o parâmetro |
|
loose_innodb_ttl_cluster_index_purge_batch_size |
Se a coluna TTL especificada não possuir índice, a chave primária será verificada em busca de dados expirados por TTL. O número de linhas verificadas na chave primária por vez é 10.000 por padrão. |
|
loose_innodb_ttl_index_purge_batch_size |
Caso a coluna TTL especificada esteja indexada, esse índice será verificado em busca de dados expirados por TTL. O número de linhas verificadas nesse índice por vez é 500 por padrão. |
|
loose_innodb_ttl_purge_start_hour |
Horário de início da tarefa de limpeza de TTL. O valor padrão é 0. O intervalo válido é de 0 a 23. O valor não pode ser maior que |
|
loose_innodb_ttl_purge_end_hour |
Horário de término da tarefa de limpeza de TTL. O valor padrão é 0. O intervalo válido é de 0 a 23. O valor não pode ser menor que |
|
loose_innodb_ttl_finished_job_expired_days |
Controla o tempo de expiração dos dados na tabela |
Monitorar o TTL
O sistema coleta periodicamente informações de execução do TTL. Visualize o status de execução das tarefas de limpeza de TTL na tabela de sistema mysql.ttl_job_history. A tabela a seguir descreve os campos dessa tabela:
|
Nome da coluna |
Descrição |
|
job_id |
ID da tarefa de limpeza de TTL, geralmente um timestamp em milissegundos. |
|
table_name |
Nome da tabela correspondente à tarefa executada por este job de TTL. |
|
state |
Status de execução da tarefa de TTL, incluindo pendente, em execução e concluído. |
|
start_time |
Horário de início da tarefa. |
|
finished_time |
Horário de conclusão da tarefa. |
|
expire_time |
Tempo de expiração dos dados limpos por esta tarefa de TTL. |
|
scan_cost |
Tempo consumido para verificar este lote. |
|
purge_cost |
Tempo consumido para limpar este lote. |
|
purge_rows |
Quantidade de linhas de dados limpas por esta tarefa de TTL. |