À medida que o volume de dados em uma tabela particionada aumenta, os dados históricos mais antigos (dados frios) ocupam espaço significativo de armazenamento e elevam custos. Para reduzir despesas sem perder o acesso às informações, use uma política de Data Lifecycle Management (DLM) para arquivar automaticamente as partições mais antigas no formato do mecanismo de alta compressão (X-Engine). Esse recurso permite separar dados quentes e mornos no nível da partição. Os dados quentes permanecem em partições InnoDB de alto desempenho, enquanto os dados mornos arquivados no X-Engine reduzem substancialmente os custos de armazenamento e continuam a suportar gravações DML e alterações Online DDL.
Como funciona
O recurso de arquivamento automático de partições utiliza uma política de Data Lifecycle Management (DLM) definida na tabela. O funcionamento ocorre da seguinte forma:
Definição da política: Configure uma política DLM ao criar uma tabela com
CREATE TABLEou ao modificar uma tabela existente comALTER TABLE. O núcleo da política é uma condição que determina quando arquivar. Por exemplo, se o número de partições ultrapassar um limiar, o sistema marca a partição mais antiga para arquivamento.-
Disparo da execução: A política não é acionada automaticamente. Inicie a tarefa de arquivamento de uma das duas maneiras abaixo:
Execução manual: Chame um procedimento armazenado do sistema para executar imediatamente todas as políticas DLM definidas.
Execução agendada: Crie um
EVENTpara chamar automaticamente o procedimento armazenado e executar as políticas conforme um cronograma predefinido, como diariamente fora do horário de pico.
Realização do arquivamento: Durante a execução da política, o sistema identifica as partições da tabela que atendem às condições de arquivamento e altera online o mecanismo de armazenamento de InnoDB para X-Engine, concluindo o processo.
Pré-requisitos
Antes de utilizar este recurso, verifique se o seu cluster atende aos seguintes requisitos:
Edição: Cluster Edition.
-
Versão do kernel:
-
Para arquivar no formato baseado em linhas do X-Engine:
MySQL 8.0.2, versão de revisão 8.0.2.2.34.1 ou posterior.
-
Para arquivar no formato de tabela colunar do X-Engine:
MySQL 8.0.2, versão de revisão 8.0.2.2.34.1 ou posterior.
-
Configurar e executar o arquivamento de partições
Esta seção orienta você na criação, execução e verificação de uma política de arquivamento.
Visão geral do processo
Crie uma política de arquivamento DLM: Defina as regras de arquivamento na tabela particionada de destino.
Execute a política de arquivamento DLM: Dispare o processo de arquivamento manualmente ou por meio de uma tarefa agendada.
Visualize o status e os resultados do arquivamento: Verifique se as partições foram convertidas com sucesso para o mecanismo X-Engine.
Etapa 1: Criar uma política de arquivamento DLM
Defina uma política de arquivamento ao criar uma tabela particionada ou adicione-a a uma tabela existente.
-
Método 1: Definir uma política ao criar uma nova tabela
Use a cláusula
DLM ADD POLICYao final da instruçãoCREATE TABLE. O exemplo abaixo cria uma tabelasalesque usa a colunaorder_timecomo chave de particionamento. Esta tabela possui duas políticas: uma política INTERVAL e uma política DLM.Política INTERVAL: Cria automaticamente novas partições para intervalos de um ano quando os dados inseridos estão fora dos intervalos de partição existentes.
Política DLM: Define uma política chamada
policy_part2part. Essa política especifica que, quando o número total de partições exceder três, o sistema marca a partição mais antiga para arquivamento no X-Engine.
CREATE TABLE `sales` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, primary key (order_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PARTITION BY RANGE COLUMNS(order_time) INTERVAL(YEAR, 1) (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = InnoDB) DLM ADD POLICY policy_part2part TIER TO PARTITION ENGINE=XENGINE READ WRITE ON (PARTITIONS OVER 3); -
Método 2: Adicionar uma política a uma tabela existente
Use a instrução
ALTER TABLEpara adicionar uma política DLM a uma tabela particionada existente. Para mais informações, consulte Criar ou excluir uma política DLM no ALTER TABLE.ALTER TABLE sales DLM ADD POLICY policy_part2part TIER TO PARTITION ENGINE=XENGINE ON (PARTITIONS OVER 3);Descrição da sintaxe:
ON (PARTITIONS OVER N)representa o núcleo da política, ondeNé a quantidade de partições recentes a serem mantidas no mecanismo InnoDB. Quando o total de partições superaN, o sistema marca as partições mais antigas além desse limite para arquivamento.
Inserir dados de teste
-
Use o procedimento armazenado
proc_batch_insertpara inserir dados de teste na tabela particionadasales. Isso aciona a política INTERVAL para criar novas partições automaticamente.DROP PROCEDURE IF EXISTS proc_batch_insert; delimiter $$ CREATE PROCEDURE proc_batch_insert(IN begin INT, IN end INT, IN name VARCHAR(20)) BEGIN SET @insert_stmt = concat('INSERT INTO ', name, ' VALUES(? , ?, ?);'); PREPARE stmt from @insert_stmt; WHILE begin <= end DO SET @ID1 = begin; SET @NAME = CONCAT(begin+begin*281313, '@stiven'); SET @TIME = from_days(begin + 737600); EXECUTE stmt using @ID1, @NAME, @TIME; SET begin = begin + 1; END WHILE; END; $$ delimiter ; CALL proc_batch_insert(1, 3000, 'sales');O resultado a seguir indica que os dados foram inseridos com sucesso:
Query OK, 1 row affected (0.50 sec) -
Execute o comando abaixo para visualizar a estrutura da tabela
sales.SHOW CREATE TABLE sales \GA saída exibe a estrutura da tabela, na qual todas as partições utilizam atualmente o mecanismo InnoDB.
mysql> SHOW CREATE TABLE sales \G *************************** 1. row *************************** Table: sales Create Table: CREATE TABLE `sales` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, PRIMARY KEY (`order_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!50500 PARTITION BY RANGE COLUMNS(order_time) */ /*!99990 800020200 INTERVAL(YEAR, 1) */ /*!50500 (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = InnoDB, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20230101000000 VALUES LESS THAN ('2023-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20240101000000 VALUES LESS THAN ('2024-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20250101000000 VALUES LESS THAN ('2025-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20260101000000 VALUES LESS THAN ('2026-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20270101000000 VALUES LESS THAN ('2027-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20280101000000 VALUES LESS THAN ('2028-01-01 00:00:00') ENGINE = InnoDB) */
Etapa 2: Executar a política de arquivamento DLM
Dispare a política de arquivamento definida para iniciar o processo de conversão do mecanismo das partições. Escolha entre a execução manual ou o agendamento de tarefas, conforme as necessidades do seu negócio.
-
Método 1: Execução agendada (Recomendado): Em ambientes de produção que exigem arquivamento regular de dados, recomenda-se o uso do recurso
EVENTdo MySQL para executar a tarefa automaticamente fora do horário de pico, como nas primeiras horas da manhã. Essa abordagem automatiza o processo.O exemplo a seguir cria um evento que começa em 01/02/2026 e roda diariamente à 01:00 para executar todas as políticas DLM.
CREATE EVENT dlm_system_base_event ON SCHEDULE EVERY 1 DAY STARTS '2026-02-01 01:00:00' do CALL dbms_dlm.execute_all_dlm_policies(); -
Método 2: Execução manual: Ideal para tarefas únicas de arquivamento ou para tentar novamente uma tarefa após a solução de problemas.
Chame o procedimento armazenado abaixo para disparar imediatamente todas as políticas DLM definidas.
CALL dbms_dlm.execute_all_dlm_policies();
Etapa 3: Visualizar o status e os resultados do arquivamento
Monitore o progresso da tarefa de arquivamento. Após a conclusão, verifique se houve alteração nos mecanismos das partições.
-
Visualize a definição da política
Consulte a tabela de sistema
mysql.dlm_policiespara confirmar a criação da política.SELECT * FROM mysql.dlm_policies WHERE Table_schema = 'your_database' AND Table_name = 'sales'\GO resultado retornado é semelhante ao seguinte:
*************************** 1. row *************************** Id: 1 Table_schema: your_database Table_name: sales Policy_name: policy_part2part Policy_type: PARTITION Archive_type: PARTITION COUNT Storage_mode: READ WRITE Storage_engine: XENGINE Storage_media: DISK Storage_schema_name: NULL Storage_table_name: NULL Data_compressed: ON Compressed_algorithm: Zstandard Enabled: ENABLED Priority_number: 200 Tier_partition_number: 3 Tier_condition: NULL Extra_info: {"oss_file_filter": "order_time"} Comment: NULLDescrição dos campos principais:
Campo
Descrição
Table_schema,Table_nameBanco de dados e tabela aos quais a política pertence.
Policy_nameNome personalizado da política.
Storage_engineMecanismo de armazenamento de destino para as partições arquivadas. Neste exemplo, trata-se do
XENGINE.Tier_partition_numberQuantidade de partições InnoDB a serem retidas conforme definido pela política. Corresponde ao valor
NemPARTITIONS OVER N. -
Acompanhe o progresso da execução
Durante ou após a execução da política, consulte a tabela de sistema
mysql.dlm_progresspara rastrear o status da tarefa.SELECT * FROM mysql.dlm_progress WHERE Table_schema = 'your_database' AND Table_name = 'sales' ORDER BY Id DESC LIMIT 1\GO resultado retornado é semelhante ao seguinte:
*************************** 1. row *************************** Id: 1 Table_schema: your_database Table_name: sales Policy_name: policy_part2part Policy_type: PARTITION Archive_option: PARTITIONS OVER 3 Storage_engine: XENGINE Storage_media: DISK Data_compressed: ON Compressed_algorithm: Zstandard Archive_partitions: p20200101000000, p20210101000000, p20220101000000, _p20230101000000, _p20240101000000, _p20250101000000 Archive_stage: ARCHIVE_COMPLETE Archive_percentage: 100 Archived_file_info: null Start_time: 2026-02-06 10:50:00 End_time: 2026-02-06 10:50:00 Extra_info: nullDescrição dos campos principais:
Campo
Descrição
Archive_partitionsPartições arquivadas nesta tarefa.
Archive_stageStatus atual da tarefa de arquivamento.
ARCHIVE_COMPLETEindica sucesso, enquantoARCHIVE_ERRORsinaliza falha.Archive_percentagePercentual de conclusão da tarefa.
Start_time,End_timeHorários de início e término da tarefa.
Extra_infoInformações adicionais. Caso
Archive_stagesejaARCHIVE_ERROR, este campo contém os detalhes do erro. -
Verifique a estrutura da tabela
Após a conclusão da tarefa de arquivamento, use o comando
SHOW CREATE TABLEpara visualizar a estrutura da tabela e confirmar que oENGINEdas partições arquivadas mudou paraXENGINE.SHOW CREATE TABLE sales\GO resultado retornado é semelhante ao seguinte:
*************************** 1. row *************************** Table: sales Create Table: CREATE TABLE `sales` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `order_time` datetime NOT NULL, PRIMARY KEY (`order_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020216 PARTITION BY RANGE COLUMNS(order_time) */ /*!99990 800020200 INTERVAL(YEAR, 1) */ /*!99990 800020216 (PARTITION p20200101000000 VALUES LESS THAN ('2020-01-01 00:00:00') ENGINE = XENGINE, PARTITION p20210101000000 VALUES LESS THAN ('2021-01-01 00:00:00') ENGINE = XENGINE, PARTITION p20220101000000 VALUES LESS THAN ('2022-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20230101000000 VALUES LESS THAN ('2023-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20240101000000 VALUES LESS THAN ('2024-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20250101000000 VALUES LESS THAN ('2025-01-01 00:00:00') ENGINE = XENGINE, PARTITION _p20260101000000 VALUES LESS THAN ('2026-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20270101000000 VALUES LESS THAN ('2027-01-01 00:00:00') ENGINE = InnoDB, PARTITION _p20280101000000 VALUES LESS THAN ('2028-01-01 00:00:00') ENGINE = InnoDB) */
Considerações para produção
Design da política: Escolha um valor apropriado para
NemPARTITIONS OVER Ncom base no seu cenário de negócios. Por exemplo, para dados de pedidos, pode ser interessante manter os últimos seis meses em partições InnoDB para garantir a performance das consultas. Já para dados de log, talvez baste reter apenas os últimos 30 dias.Monitoramento e alertas: Acompanhe o campo
Archive_stagena tabelamysql.dlm_progress. Se o status forARCHIVE_ERROR, dispare um alerta imediato para permitir uma intervenção rápida.