Use o Data Transmission Service (DTS) para sincronizar dados de um cluster PolarDB for PostgreSQL para uma instância ApsaraDB for SelectDB destinada a análises de dados em larga escala. O DTS oferece suporte à sincronização de schema, sincronização completa de dados e sincronização incremental contínua.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância ApsaraDB for SelectDB de destino com mais espaço em disco do que o utilizado pelo cluster PolarDB for PostgreSQL de origem. Para mais informações, consulte Criar uma instância.
O parâmetro
wal_leveldo cluster PolarDB for PostgreSQL de origem definido comological. Para mais informações, consulte Definir parâmetros do cluster.
Faturamento
|
Tipo de sincronização |
Tarifa |
|
Sincronização de schema e sincronização completa de dados |
Gratuita |
|
Sincronização incremental de dados |
Paga. Para mais informações, consulte Visão geral do faturamento. |
Operações SQL suportadas
|
Tipo de operação |
Instrução SQL |
|
DML |
INSERT, UPDATE, DELETE |
|
DDL |
ADD COLUMN, DROP COLUMN |
Permissões necessárias
|
Banco de dados |
Permissões necessárias |
Como conceder |
|
Cluster PolarDB for PostgreSQL de origem |
Conta privilegiada proprietária do banco de dados a ser sincronizado |
Criar uma conta de banco de dados e Gerenciamento de banco de dados |
|
Instância ApsaraDB for SelectDB de destino |
Permissões de acesso ao cluster (Usage_priv) e permissões de acesso ao banco de dados (Select_priv, Load_priv, Alter_priv, Create_priv e Drop_priv) |
Gerenciamento de permissões do cluster e Gerenciamento básico de permissões |
Limitações
Banco de dados de origem
Todas as tabelas a serem sincronizadas devem ter uma chave primária ou um índice único não nulo. Se os campos da tabela não forem únicos, dados duplicados poderão surgir no banco de dados de destino.
Para tabelas sem chave primária ou índice único não nulo: selecione Schema Synchronization em Synchronization Types e duplicate para Engine na etapa Configurations for Databases, Tables, and Columns.
Transações de longa duração no banco de dados de origem podem causar acúmulo de logs WAL (write-ahead logging) antes do commit dessas transações, o que pode esgotar o espaço em disco do banco de dados de origem.
O cluster PolarDB for PostgreSQL deve oferecer suporte e ter o recurso Logical Replication Slot Failover ativado. Se o cluster usar o PostgreSQL 14, que não oferece suporte ao Logical Replication Slot Failover, um failover de alta disponibilidade (HA) poderá causar falha permanente na instância de sincronização, exigindo reconfiguração completa.
Se uma única alteração incremental exceder 256 MB, a instância de sincronização poderá falhar permanentemente. Reconfigure a instância de sincronização para recuperar.
Não execute operações DDL que alterem schemas durante a sincronização inicial de schema ou a sincronização inicial completa de dados. O DTS consulta o banco de dados de origem durante a sincronização inicial completa de dados, criando bloqueios de metadados que podem impedir operações DDL.
Banco de dados de destino
Requisitos do modelo de dados do SelectDB
O DTS só consegue sincronizar dados para tabelas que usam o modelo Unique Key ou Duplicate key no ApsaraDB for SelectDB. Escolha o modelo conforme suas necessidades:
|
Requisito |
Modelo recomendado |
Observações |
|
Registros consistentes e deduplicados |
Modelo Unique Key |
Todas as chaves únicas da tabela de destino devem existir na tabela de origem e no objeto de sincronização. Chaves ausentes causam inconsistência de dados. |
|
Inserção apenas por adição (append-only) ou ingestão de alto throughput |
Modelo Duplicate key |
Dados duplicados podem aparecer se ocorrer uma nova tentativa ou se duas ou mais operações DML forem executadas na mesma linha após o início da instância de sincronização. Use as colunas |
Restrições de objetos e nomenclatura
Apenas o parâmetro
bucket_countpode ser especificado na seção Selected Objects. O valor deve ser um número inteiro positivo. Valor padrão: auto.O ApsaraDB for SelectDB aceita apenas nomes de bancos de dados e tabelas que começam com uma letra. Use o recurso de mapeamento de nomes de objetos para renomear objetos que não iniciem com letra.
Nomes de objetos (bancos de dados, tabelas ou colunas) contendo caracteres chineses devem ser renomeados por meio do recurso de mapeamento de nomes de objetos.
Uma única instância de sincronização pode sincronizar apenas um banco de dados. Para sincronizar vários bancos de dados, configure uma instância de sincronização separada para cada um.
Escopo de sincronização e limites de DDL
Não há suporte para sincronização de tabelas de extensão TimescaleDB nem tabelas com herança entre schemas.
Não é possível modificar operações DDL em várias colunas simultaneamente, nem modificar operações DDL na mesma tabela consecutivamente.
Em cenários de mesclagem de múltiplas tabelas (sincronização de várias tabelas de origem para uma única tabela de destino), os schemas de todas as tabelas de origem devem ser idênticos. Caso contrário, podem ocorrer inconsistências de dados ou falha na tarefa.
Tabelas particionadas
Ao sincronizar tabelas particionadas, inclua tanto a tabela pai quanto todas as suas partições filhas como objetos de sincronização. A tabela pai de uma tabela particionada do PostgreSQL não armazena dados diretamente — todos os dados residem nas partições filhas. A omissão de partições causa inconsistência de dados.
Requisito de REPLICA IDENTITY
Execute o seguinte comando nas tabelas antes de gravar dados nestes três cenários: quando a instância é executada pela primeira vez; quando você seleciona objetos no nível de schema e uma nova tabela é criada ou reconstruída usando RENAME; e quando usa o recurso para modificar objetos de sincronização.
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Substitua schema e table pelos nomes reais do schema e da tabela. Execute este comando fora dos horários de pico. Não realize operações de bloqueio de tabela enquanto este comando estiver em execução. Se você ignorar a pré-verificação relacionada, o DTS executa automaticamente este comando durante a inicialização da instância.
Operações que causam falha na tarefa
As operações a seguir causam falha na tarefa de sincronização. Reinicie a instância de sincronização para retomar:
Adicionar nós de backend ao banco de dados ApsaraDB for SelectDB de destino durante a sincronização
Criar clusters na instância ApsaraDB for SelectDB de destino durante a sincronização
Tabelas temporárias
O DTS cria as seguintes tabelas temporárias no banco de dados de origem para dar suporte à sincronização incremental. Não as exclua durante a sincronização — elas são removidas automaticamente após a liberação da instância do DTS:
public.dts_pg_class, public.dts_pg_attribute, public.dts_pg_type, public.dts_pg_enum, public.dts_postgres_heartbeat, public.dts_ddl_command, public.dts_args_session e public.aliyun_dts_instance.
Slot de replicação
O DTS cria um slot de replicação com o prefixo dts_sync_ no banco de dados de origem. Este slot retém logs incrementais dos últimos 15 minutos. Quando a tarefa de sincronização falha ou a instância é liberada, o DTS tenta limpar o slot automaticamente.
Se você alterar a senha da conta do banco de dados de origem ou remover a lista de permissões de endereços IP do DTS durante a sincronização, o slot de replicação não poderá ser limpo automaticamente. Limpe manualmente o slot de replicação para evitar que o espaço em disco seja esgotado. Se ocorrer um failover primário/secundário, faça login no banco de dados secundário para realizar a limpeza.

Incremental synchronization latency
O DTS usa uma política de sincronização em lote para reduzir a carga no destino. Por padrão, o DTS grava dados no máximo uma vez a cada 5 segundos por objeto de sincronização, resultando em uma latência normal de sincronização de até 10 segundos. Para reduzir essa latência, modifique o parâmetro selectdb.reservoir.timeout.milliseconds da instância DTS no console. O intervalo válido é de 1.000 a 10.000 milissegundos.
Um tempo de lote menor aumenta a frequência de gravação, o que pode elevar a carga e o tempo de resposta de gravação do destino e, consequentemente, aumentar a latência de sincronização do DTS. Ajuste o tempo de lote com base na carga do destino.
Outras observações
O DTS não verifica a validade de metadados como sequências. Verifique manualmente a validade dos metadados antes e depois da sincronização.
Realize a sincronização completa de dados quando a carga da CPU dos bancos de dados de origem e de destino estiver abaixo de 30%.
Se uma instância falhar, a equipe de suporte do DTS tentará recuperá-la dentro de 8 horas. Durante a recuperação, apenas os parâmetros da instância DTS podem ser modificados — os parâmetros do banco de dados não são alterados. Para os parâmetros que podem ser modificados, consulte Modificar parâmetros da instância.
Criar uma tarefa de sincronização
Etapa 1: Acessar a página Data Synchronization
Use um dos consoles a seguir.
Console do DTS
Faça login no .Console do DTS
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo da página, selecione a região onde reside a tarefa de sincronização.
Console do DMS
Nota
As operações reais podem variar dependendo do modo e do layout do console do DMS. Para mais informações, consulte Modo simples e Personalizar o layout e o estilo do console do DMS.
Faça login no .Console do DMS
Na barra de navegação superior, passe o ponteiro sobre Data + AI e escolha DTS (DTS) > Data Synchronization.
Na lista suspensa à direita de Data Synchronization Tasks, selecione a região onde reside a instância de sincronização.
Etapa 2: Configurar bancos de dados de origem e destino
Clique em Create Task para acessar a página de configuração da tarefa.
-
Configure os bancos de dados de origem e destino usando os parâmetros a seguir.
Categoria
Parâmetro
Descrição
Nenhum
Task Name
Nome da tarefa. O DTS gera um nome automaticamente. Especifique um nome descritivo para facilitar a identificação da tarefa. Não é necessário um nome exclusivo.
Source Database
Select Existing Connection
Se você registrou a instância do banco de dados no DTS, selecione-a na lista suspensa. O DTS preenche automaticamente os parâmetros do banco de dados. Caso contrário, configure os parâmetros a seguir manualmente.
Database Type
Selecione PolarDB for PostgreSQL.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Selecione a região onde reside o cluster PolarDB for PostgreSQL de origem.
Replicate Data Across Alibaba Cloud Accounts
Selecione No se os bancos de dados de origem e destino pertencerem à mesma conta Alibaba Cloud.
Instance ID
Selecione o ID do cluster PolarDB for PostgreSQL de origem.
Database Name
Insira o nome do banco de dados que contém os objetos a serem sincronizados.
Database Account
Insira a conta do banco de dados. Para requisitos de permissão, consulte Permissões necessárias.
Database Password
Insira a senha da conta do banco de dados.
Destination Database
Select Existing Connection
Se você registrou a instância do banco de dados no DTS, selecione-a na lista suspensa. O DTS preenche automaticamente os parâmetros do banco de dados. Caso contrário, configure os parâmetros a seguir manualmente.
Database Type
Selecione SelectDB.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Selecione a região onde reside a instância SelectDB de destino.
Replicate Data Across Alibaba Cloud Accounts
Selecione No se os bancos de dados de origem e destino pertencerem à mesma conta Alibaba Cloud.
Instance ID
Selecione o ID da instância SelectDB de destino.
Database Account
Insira a conta do banco de dados. Para requisitos de permissão, consulte Permissões necessárias.
Database Password
Insira a senha da conta do banco de dados.
-
Clique em Test Connectivity and Proceed.
Certifique-se de que os blocos CIDR dos servidores DTS foram adicionados às configurações de segurança dos bancos de dados de origem e de destino. Para mais informações, consulte Adicionar endereços IP do servidor DTS a uma lista de permissões .
Etapa 3: Configurar objetos de sincronização
-
Na etapa Configure Objects, configure os parâmetros de sincronização.
Parâmetro Descrição Synchronization Types Por padrão, Incremental Data Synchronization está selecionado. Selecione também Schema Synchronization e Full Data Synchronization. Após a conclusão da pré-verificação, o DTS sincroniza os dados históricos como base para a sincronização incremental contínua. ImportanteAo sincronizar do PolarDB for PostgreSQL para o SelectDB, ocorre conversão de tipos de dados. Se você não selecionar Schema Synchronization, crie as tabelas de destino manualmente usando o modelo Unique ou Duplicate correspondente. Para mais informações, consulte Mapeamento de tipos de dados, Informações adicionais de coluna e Modelo de dados.
Processing Mode of Conflicting Tables Precheck and Report Errors: O DTS verifica a existência de tabelas com o mesmo nome no banco de dados de destino. Se houver uma tabela duplicada, a pré-verificação falha e a tarefa não inicia. NotaSe não for possível excluir ou renomear a tabela duplicada, use o recurso de mapeamento de nomes de objetos. Para mais informações, consulte Mapear nomes de schema, tabela e coluna. Ignore Errors and Proceed: O DTS ignora a verificação de nomes de tabela duplicados.
AvisoEsta opção pode causar inconsistência de dados. Se os schemas das tabelas forem iguais e um registro tiver uma chave primária ou única correspondente, o registro de origem sobrescreverá o registro de destino. Se os schemas diferirem, a inicialização pode falhar ou apenas algumas colunas podem ser sincronizadas.
Capitalization of Object Names in Destination Instance Política de uso de maiúsculas/minúsculas para nomes de bancos de dados, tabelas e colunas na instância de destino. Padrão: DTS default policy. Para mais informações, consulte Especificar o uso de maiúsculas/minúsculas em nomes de objetos na instância de destino. Source Objects Selecione um ou mais objetos e clique no ícone
para movê-los para Selected Objects. Os objetos podem ser selecionados no nível de schema, tabela ou coluna.Selected Objects - Para renomear um objeto de destino ou especificar um objeto receptor, clique com o botão direito nele na seção Selected Objects. Para mais informações, consulte Mapear nomes de objetos. - Para remover um objeto selecionado, clique nele e depois clique no ícone
. - Para definir o parâmetro bucket_countde uma tabela (disponível apenas quando Schema Synchronization estiver selecionado e os objetos forem selecionados no nível de tabela): clique com o botão direito na tabela, defina Enable Parameter Settings como Yesconfigurações de notificação de alerta, insira o valor e clique em OK.NotaRenomear um objeto usando o mapeamento de nomes de objetos pode causar falha na sincronização de objetos dependentes. Para filtrar dados com condições WHERE, clique com o botão direito em uma tabela e especifique as condições. Para mais informações, consulte Especificar condições de filtro. Para selecionar operações SQL para sincronização incremental, clique com o botão direito em um objeto e selecione as operações.
-
Clique em Next: Advanced Settings e configure os parâmetros a seguir.
Parâmetro Descrição Dedicated Cluster for Task Scheduling Por padrão, o DTS agenda a tarefa para o cluster compartilhado. Para melhorar a estabilidade, adquira um cluster dedicado. Para mais informações, consulte O que é um cluster dedicado do DTS. Retry Time for Failed Connections Intervalo de tempo para tentar novamente conexões com falha. Valores válidos: 10–1440 minutos. Padrão: 720 minutos. Defina como mais de 30 minutos. Se o DTS reconectar dentro desta janela, a tarefa será retomada. Caso contrário, a tarefa falhará. NotaSe várias tarefas compartilharem o mesmo banco de dados de origem ou destino e tiverem janelas de nova tentativa diferentes, a janela mais curta terá precedência. O DTS cobra pela instância durante as novas tentativas.
Retry Time for Other Issues Intervalo de tempo para tentar novamente operações DDL ou DML com falha. Valores válidos: 1–1440 minutos. Padrão: 10 minutos. Defina como mais de 10 minutos. Este valor deve ser menor que Retry Time for Failed Connections. Enable Throttling for Full Data Synchronization Limite a sincronização completa de dados para reduzir a carga na origem e no destino. Configure Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s). Disponível apenas quando Full Data Synchronization estiver selecionado. Enable Throttling for Incremental Data Synchronization Limite a sincronização incremental de dados configurando RPS of Incremental Data Synchronization e Data synchronization speed for incremental synchronization (MB/s). Environment Tag Uma tag opcional para identificar a instância. Configure ETL Especifique se deseja ativar o recurso de extração, transformação e carga (ETL). Selecione Yes para inserir instruções de processamento de dados no editor de código. Para mais informações, consulte Configurar ETL em uma tarefa de migração ou sincronização de dados. Selecione No para pular a configuração de ETL. Monitoring and Alerting Especifique se deseja configurar alertas. Selecione Yes para configurar o limiar de alerta e as definições de notificação. Para mais informações, consulte a seção Configurar monitoramento e alertas ao criar uma tarefa DTS. -
(Opcional) Clique em Next: Configure Database and Table Fields para definir a Primary Key Column, Distribution Key e Engine para as tabelas de destino.
- Esta etapa está disponível apenas quando Schema Synchronization estiver selecionado em Synchronization Types . Defina Definition Status como All para fazer modificações. - Você pode selecionar várias colunas como uma chave primária composta. Pelo menos uma coluna em Primary Key Column também deve ser selecionada como Distribution Key . - Para tabelas sem chave primária ou restrição UNIQUE, defina Engine como duplicate . Caso contrário, a sincronização pode falhar ou dados podem ser perdidos.
Etapa 4: Executar a pré-verificação
-
Clique em Next: Save Task Settings and Precheck. O DTS executa uma pré-verificação antes que a tarefa de sincronização possa iniciar. A tarefa só começa após a aprovação na pré-verificação.
Para visualizar os parâmetros da API para esta configuração, passe o ponteiro sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters .
Se a pré-verificação falhar, clique em View Details ao lado de cada item com falha, solucione o problema e execute a pré-verificação novamente.
-
Se um alerta for acionado:
Se o alerta não puder ser ignorado, clique em View Details, corrija o problema e execute a pré-verificação novamente.
Se o alerta puder ser ignorado, clique em Confirm Alert Details, clique em Ignore na caixa de diálogo View Details, clique em OK e, em seguida, clique em Precheck Again.
Ignorar alertas pode causar inconsistência de dados e expor seu negócio a riscos.
Etapa 5: Adquirir a instância
Aguarde até que a Success Rate atinja 100%, então clique em Next: Purchase Instance.
-
Na página buy, configure os parâmetros a seguir.
Parâmetro
Descrição
Billing Method
Subscription: Pagamento antecipado por uma duração fixa. Mais econômico para uso de longo prazo. Pay-as-you-go: Faturamento por hora. Adequado para uso de curto prazo. Libere a instância quando não for mais necessária para reduzir custos.
Resource Group Settings
O grupo de recursos para a instância de sincronização. Padrão: default resource group. Para mais informações, consulte O que é Resource Management?
Instance Class
A categoria de velocidade de sincronização. Selecione com base nos requisitos do seu negócio. Para mais informações, consulte Classes de instância de instâncias de sincronização de dados.
Subscription Duration
Disponível apenas para o método de faturamento por assinatura. Opções: 1–9 meses, 1 ano, 2 anos, 3 anos ou 5 anos.
Leia e selecione Data Transmission Service (Pay-as-you-go) Service Terms.
Clique em Buy and Start. Na caixa de diálogo exibida, clique em OK.
A tarefa aparece na lista de tarefas. Monitore o progresso a partir dela.
Mapeamento de tipos de dados
A tabela a seguir mostra como os tipos de dados do PolarDB for PostgreSQL são mapeados para os tipos de dados do SelectDB.
| Categoria | Tipo de dados do PolarDB for PostgreSQL | Tipo de dados do SelectDB |
|---|---|---|
| Numérico | SMALLINT | SMALLINT |
| INTEGER | INT | |
| BIGINT | BIGINT | |
| DECIMAL | DECIMAL | |
| NUMERIC | DECIMAL | |
| REAL | DOUBLE | |
| DOUBLE | DOUBLE | |
| SMALLSERIAL | SMALLINT | |
| SERIAL | INT | |
| BIGSERIAL | BIGINT | |
| Monetário | MONEY | STRING |
| Caractere | CHAR(n), VARCHAR(n) | VARCHAR. Importante
Para evitar perda de dados, CHAR(n) e VARCHAR(n) são convertidos para VARCHAR(4\*n). Se nenhum comprimento for especificado, o padrão VARCHAR(65533) do SelectDB será usado. Se o comprimento exceder 65533, os dados serão convertidos para STRING. |
| TEXT | STRING | |
| Binário | BYTEA | STRING |
| Data e hora | TIMESTAMP [(P)] [WITHOUT TIME ZONE] | DATETIMEV2 |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | |
| DATE | DATEV2 | |
| TIME [(P)] [WITHOUT TIME ZONE] | VARCHAR(50) | |
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | |
| INTERVAL [FIELDS] [(P)] | STRING | |
| Booleano | BOOLEAN | BOOLEAN |
| Geométrico | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING |
| Endereço de rede | CIDR, INET, MACADDR, MACADDR8 | STRING |
| Busca de texto | TSVECTOR | STRING |
| XML | XML | STRING |
| JSON | JSON | JSON |
Informações adicionais de coluna
Para tabelas que usam o modelo Duplicate key, o DTS adiciona automaticamente ou exige as seguintes colunas na tabela de destino.
|
Nome da coluna |
Tipo de dados |
Valor padrão |
Descrição |
|
|
Int |
0 |
Sinalizador de exclusão. Inserção: 0. Atualização: 0. Exclusão: 1. |
|
|
Bigint |
0 |
Sincronização completa de dados: 0. Sincronização incremental de dados: o timestamp correspondente em segundos do log binário do banco de dados de origem. |
|
|
Bigint |
0 |
Sincronização completa de dados: 0. Sincronização incremental de dados: o ID do registro do log incremental, que identifica exclusivamente a entrada de log. O valor é único e incremental. |