O recurso de gerenciamento de ciclo de vida de dados (DLM) ajuda a reduzir custos de armazenamento e aumentar a eficiência. Ele arquiva automática e periodicamente dados frios pouco acessados do PolarStore para um meio de armazenamento de baixo custo, como o Object Storage Service (OSS).
Pré-requisitos
-
Seu cluster deve executar o PolarDB for MySQL 8.0.2, revisão 8.0.2.2.34.1 ou posterior.
NotaPara verificar a versão do seu cluster, consulte Consultar a versão do mecanismo.
Se o seu cluster executar o PolarDB for MySQL 8.0.2, revisão 8.0.2.2.11.1 ou posterior, o recurso DLM não registrará operações no log binário.
-
Ative o arquivamento de dados frios antes de usar políticas de DLM. Para mais informações, consulte Ativar o arquivamento de dados frios.
NotaCaso o recurso de arquivamento de dados frios não esteja ativado, o sistema retornará o seguinte erro:
ERROR 8158 (HY000): [Data Lifecycle Management] DLM storage engine is not support. The value of polar_dlm_storage_mode is OFF.
Limitações
O recurso DLM suporta apenas tabelas particionadas sem subpartições. O método de particionamento deve ser RANGE COLUMN.
Não é possível usar o recurso DLM em uma tabela particionada que possua um índice secundário global (GSI).
O PolarDB for MySQL não suporta a modificação de uma política de DLM. Para alterar uma política, exclua primeiro a política existente e crie uma nova.
Se existir uma política de DLM em uma tabela, não execute operações DDL que causem inconsistências de esquema entre a tabela de source e a tabela de arquivamento, como adicionar ou excluir colunas ou modificar tipos de dados das colunas. Tais inconsistências podem impedir a análise dos dados arquivados posteriormente. Antes de realizar essas operações DDL, exclua a política de DLM da tabela. Para retomar o arquivamento automático de dados, crie uma nova política de DLM e especifique um novo nome para a tabela de arquivamento. O novo nome não pode ser igual a nenhum nome de tabela de arquivamento usado anteriormente.
-
Utilize o particionamento INTERVAL RANGE para estender partições automaticamente e o recurso DLM para arquivar dados de partições pouco utilizadas no OSS.
NotaO particionamento INTERVAL RANGE é suportado apenas para clusters que executam o PolarDB for MySQL 8.0.2, revisão 8.0.2.2.0 ou posterior.
Especifique uma política de DLM ao executar a instrução
CREATE TABLEouALTER TABLE.A instrução
SHOW CREATE TABLEnão exibe políticas de DLM. Visualize todas as políticas de DLM na tabela mysql.dlm_policies.
Precauções
Após o arquivamento dos dados frios, a tabela de arquivamento no OSS torna-se somente leitura, e o desempenho das consultas pode ser lento. Teste antecipadamente para garantir que o desempenho das consultas atenda aos seus requisitos.
Depois que uma partição de uma tabela particionada é arquivada no OSS, os dados dessa partição tornam-se somente leitura. Não é possível executar operações DDL na tabela particionada.
As operações de backup não incluem dados arquivados no OSS. Os dados no OSS não suportam recuperação point-in-time.
Sintaxe
Criar uma política
-
Criar uma política de DLM com CREATE TABLE
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] [dlm_add_options] dlm_add_options: DLM ADD [(dlm_policy_definition [, dlm_policy_definition] ...)] dlm_policy_definition: POLICY policy_name [TIER TO TABLE/TIER TO PARTITION/TIER TO NONE] [ENGINE [=] engine_name] [STORAGE SCHEMA_NAME [=] storage_schema_name] [STORAGE TABLE_NAME [=] storage_table_name] [STORAGE [=] OSS] [READ ONLY] [COMMENT 'comment_string'] [EXTRA_INFO 'extra_info'] ON [(PARTITIONS OVER num)] -
Criar uma política de DLM com ALTER TABLE
ALTER TABLE tbl_name [alter_option [, alter_option] ...] [partition_options] [dlm_add_options] dlm_add_options: DLM ADD [(dlm_policy_definition [, dlm_policy_definition] ...)] dlm_policy_definition: POLICY policy_name [TIER TO TABLE/TIER TO PARTITION/TIER TO NONE] [ENGINE [=] engine_name] [STORAGE SCHEMA_NAME [=] storage_schema_name] [STORAGE TABLE_NAME [=] storage_table_name] [STORAGE [=] OSS] [READ ONLY] [COMMENT 'comment_string'] [EXTRA_INFO 'extra_info'] ON [(PARTITIONS OVER num)]
Parâmetros da política de DLM
Parâmetro | Obrigatório | Descrição |
tbl_name | Sim | Nome da tabela. |
policy_name | Sim | Nome da política. |
TIER TO TABLE | Sim | Archives data to a new OSS foreign table. |
TIER TO PARTITION | Sim | Converte partições de dados quentes em partições de dados frios armazenadas no OSS dentro da mesma tabela, criando uma tabela particionada híbrida. Nota
|
TIER TO NONE | Sim | Exclui os dados das partições mais antigas em vez de arquivá-los. |
engine_name | Não | Mecanismo de armazenamento para os dados arquivados. Atualmente, os dados só podem ser arquivados para o mecanismo CSV. |
storage_schema_name | Não | Banco de dados para a tabela de arquivamento. O padrão é o banco de dados da tabela de source. |
storage_table_name | Não | Nome da tabela de arquivamento. Se não especificado, o padrão será |
STORAGE [=] OSS | Não | Armazena os dados arquivados no OSS. Este é o padrão. |
READ ONLY | Não | Torna os dados arquivados somente leitura. Este é o padrão. |
comment_string | Não | Comentário para a política de DLM. |
extra_info | Não | Especifica as informações de OSS_FILE_FILTER para a tabela OSS de destino. Nota
O formato de |
ON (PARTITIONS OVER num) | Sim | Archives data when the number of partitions is greater than |
Gerenciar uma política
-
Ative uma política de DLM.
ALTER TABLE table_name DLM ENABLE POLICY [(dlm_policy_name [, dlm_policy_name] ...)] -
Desative uma política de DLM.
ALTER TABLE table_name DLM DISABLE POLICY [(dlm_policy_name [, dlm_policy_name] ...)] -
Exclua uma política de DLM.
ALTER TABLE table_name DLM DROP POLICY [(dlm_policy_name [, dlm_policy_name] ...)]
Nessas instruções, table_name é o nome da tabela, e dlm_policy_name é o nome da política a ser gerenciada. É possível especificar vários nomes de políticas.
Executar uma política
-
Execute todas as políticas de DLM em todas as tabelas do cluster atual.
CALL dbms_dlm.execute_all_dlm_policies(); -
Execute as políticas de DLM em uma única tabela.
CALL dbms_dlm.execute_table_dlm_policies('database_name', 'table_name');Nesta instrução,
database_nameé o nome do banco de dados que contém a tabela, etable_nameé o nome da tabela.
Utilize o recurso MySQL event para executar políticas de DLM durante a janela de manutenção do seu cluster. Esse método evita que o desempenho do banco de dados seja afetado durante os horários de pico de negócios e permite mover periodicamente dados expirados para reduzir custos de armazenamento. Use a seguinte sintaxe para executar uma política de DLM com um evento:
CREATE
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[COMMENT 'comment']
DO event_body;
schedule: {
EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
}
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
event_body: {
CALL dbms_dlm.execute_all_dlm_policies();
| CALL dbms_dlm.execute_table_dlm_policies('database_name', 'table_name');
}
A tabela a seguir descreve os parâmetros.
Parâmetro | Obrigatório | Descrição |
event_name | Sim | Nome do evento. |
schedule | Sim | Horário e frequência para executar o evento. |
comment | Não | Comentário para o evento. |
event_body | Sim | Conteúdo que o evento executa. Deve ser uma instrução que execute uma política de DLM. Nota
|
interval | Sim | Frequência de execução do evento. |
timestamp | Sim | Horário para iniciar a execução do evento. |
database_name | Sim | Nome do banco de dados. |
table_name | Sim | Nome da tabela. |
Para mais informações sobre o recurso MySQL EVENT, consulte a documentação oficial do MySQL para CREATE EVENT.
Para exemplos de uso, consulte Exemplos de arquivamento de dados frios no OSS.
Exemplos
Arquivar dados em uma tabela externa
Arquivar partições no OSS
Excluir dados frios
Gerenciar políticas com ALTER TABLE
Solucionar erros de execução
Políticas de DLM podem falhar na execução devido a problemas de configuração. Os registros de erro são armazenados na tabela mysql.dlm_progress. Execute o seguinte comando para visualizar os registros de erro:
SELECT * FROM mysql.dlm_progress WHERE Archive_stage = "ARCHIVE_ERROR";
Localize os detalhes do erro no campo Extra_info. Após identificar e resolver a causa do erro, exclua o registro ou atualize seu Archive_stage para ARCHIVE_COMPLETE. Em seguida, execute o comando call dbms_dlm.execute_all_dlm_policies; para executar a política manualmente ou aguarde a próxima execução agendada.
Para segurança dos dados, se um registro de execução de política tiver o estado ARCHIVE_ERROR, o agendador não executará a política novamente automaticamente. Depois que você confirmar a causa da falha e atualizar o registro, a política retomará sua execução agendada.