Este tópico descreve o recurso de limpeza de dados expirados do PolarDB for MySQL.
Restrições de versão
O PolarDB for MySQL é compatível com as seguintes versões do mecanismo de banco de dados:
O MySQL 8.0.1 requer a versão secundária 8.0.1.1.49.2 ou posterior.
O MySQL 8.0.2 requer a versão secundária 8.0.2.2.29.2 ou posterior.
Para visualizar a versão do kernel, consulte Engine versions.
Notas de uso
Não é possível configurar propriedades de tempo de vida (TTL) em tabelas temporárias, incluindo tabelas temporárias locais e globais.
Tabelas com propriedades de TTL não são compatíveis com Global Secondary Indexes (GSIs).
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.
Uma tabela com propriedades de TTL não pode conter triggers.
Nem todos os dados expirados são excluídos imediatamente. O momento da exclusão dos dados expirados depende do ciclo de agendamento da tarefa de limpeza em segundo plano.
Ao restaurar bancos de dados e tabelas ou restaurar a partir de backups, defina
loose_innodb_enable_ttl_purgecomo OFF para desativar a limpeza de dados expirados por TTL. Isso ocorre porque todos os dados podem ter expirado após a restauração.Uma coluna com propriedades de TTL deve ser do tipo TIMESTAMP ou DATETIME.
Os dados limpos pelo TTL não são registrados no binary log. Quando você utiliza o binary log para sincronização de dados e uma tabela no banco de dados source tem o TTL ativado, podem ocorrer conflitos de valores de chave durante a sincronização dos dados para o banco de dados secundário.
Sintaxe
Use as instruções CREATE TABLE ou ALTER TABLE para configurar o TTL de uma tabela.
Crie uma tabela com propriedades de TTL
Use um dos seguintes métodos para criar uma tabela com propriedades de TTL:
Uma tabela chamada t1 é criada com created_at especificado como sua coluna de TTL, que representa o horário de criação dos dados. Defina o TTL de created_at para determinar se os dados serão excluídos.
-
Defina o TTL máximo 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 configuração
TTL='created_at@100'define o TTL máximo das linhas na tabela como 100 segundos. Os dados expirados que excedem essa duração são excluídos posteriormente. -
Defina o TTL máximo 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;NotaAo definir
TTL ='created_at'+ INTERVAL 3 HOUR, você define o TTL máximo dos dados na tabela como 3 horas. Os dados expirados que excedem essa duração são excluídos automaticamente.Essa configuração de TTL é compatível com várias unidades de tempo, incluindo YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE e SECOND. Essa flexibilidade permite que você selecione uma unidade de tempo adequada para o gerenciamento e a manutenção eficientes dos dados, de acordo com os seus requisitos.
Modifique as propriedades de TTL de uma tabela
Use um dos seguintes métodos para modificar as propriedades de TTL de uma tabela:
Na tabela t1, modifique o TTL de created_at para determinar se os dados serão excluídos.
-
Defina o TTL máximo de
created_atcomo 10.000 segundos.ALTER TABLE `t1` TTL='created_at@10000';NotaDefinir o TTL do campo
created_atcomo 10.000 segundos torna os dados válidos por 10.000 segundos após o horário de criação. Os dados com mais de 10.000 segundos são excluídos automaticamente. -
Defina o TTL máximo de
created_atcomo 3 dias.ALTER TABLE `t1` TTL='created_at' + INTERVAL 3 DAY;NotaUse o carimbo de data e hora
created_atnas propriedades de TTL e adicione um período de validade de 3 dias para definir a expiração dos dados em 3 dias. Isso garante que os dados não excedam 3 dias após a criação. Os dados com mais de 3 dias são excluídos automaticamente.
Limpe as propriedades de TTL de uma tabela
ALTER TABLE t1 TTL = '';
Consulte 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 a instrução anterior para consultar se uma tabela contém informações de TTL.
Parâmetros
Os seguintes parâmetros globais também são adicionados para controlar a limpeza de dados expirados por TTL:
O PolarDB permite que você modifique os seguintes parâmetros globais no console para controlar a limpeza de dados expirados por TTL.
|
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
Você deve ativar a limpeza de dados expirados por TTL no console. |
|
loose_innodb_ttl_min_interval |
A duração mínima permitida ao definir um tempo de expiração de dados. O valor padrão é 100. A unidade padrão é o segundo. |
|
loose_innodb_ttl_purge_thread |
O número de threads para limpar dados expirados por TTL. Após a modificação, redefina o parâmetro |
|
loose_innodb_ttl_cluster_index_purge_batch_size |
Se a coluna de TTL especificada não tiver índice, a chave primária será verificada durante a varredura de dados expirados por TTL. O número padrão de linhas de chave primária verificadas por vez é 10.000. |
|
loose_innodb_ttl_index_purge_batch_size |
Se a coluna de TTL especificada tiver um índice, o índice será verificado durante a varredura de dados expirados por TTL. O número padrão de linhas de índice verificadas por vez é 500. |
|
loose_innodb_ttl_purge_start_hour |
O horário de início da tarefa de limpeza de TTL. O valor padrão é 0. O valor varia de 0 a 23 e não pode exceder |
|
loose_innodb_ttl_purge_end_hour |
O horário de término da tarefa de limpeza de TTL. O valor padrão é 0. O valor varia de 0 a 23 e não pode ser inferior a |
|
loose_innodb_ttl_finished_job_expired_days |
Controla o tempo de expiração dos dados na tabela |
Monitore o TTL
O sistema coleta periodicamente informações de tempo de execução do TTL e fornece uma tabela do sistema que mostra o status de execução detalhado das tarefas de limpeza de TTL. A tabela a seguir descreve os campos na tabela mysql.ttl_job_history:
|
Nome da coluna |
Descrição |
|
job_id |
O ID da tarefa de limpeza de TTL, que geralmente é um carimbo de data e hora em milissegundos. |
|
table_name |
O nome da tabela associada a esta tarefa de TTL. |
|
state |
O status de execução da tarefa de TTL: pendente, em execução ou concluída. |
|
start_time |
O horário de início da tarefa. |
|
finished_time |
O horário de conclusão da tarefa. |
|
expire_time |
O tempo de expiração dos dados limpos por esta tarefa de TTL. |
|
scan_cost |
O tempo necessário para verificar este lote. |
|
purge_cost |
O tempo necessário para limpar este lote. |
|
purge_rows |
O número de linhas de dados limpas por esta tarefa de TTL. |