Todos os produtos
Search
Central de documentação

PolarDB:Fragmentação comum de tabelas

Última atualização: Jun 28, 2026

A fragmentação comum de tabelas no PolarDB-X distribui automaticamente todas as tabelas de um banco de dados lógico entre vários nós de dados (DNs). Esse recurso elimina gargalos de recursos em servidores únicos e equilibra a carga de armazenamento e consultas em todo o cluster.

Para ativar esse recurso, defina DEFAULT_SINGLE='on' ao criar um banco de dados no modo AUTO.

Como funciona

O PolarDB-X define a distribuição de cada tabela com base na especificação de uma definição de partição do MySQL durante a criação da tabela:

Tipo de tabela

Definição de partição

Comportamento de distribuição

Não particionada

Não especificada

Distribuição aleatória entre DNs para equilibrar cargas

Particionada

Especificada explicitamente

Distribuição uniforme entre DNs

Nota

Tabelas não particionadas são atribuídas aleatoriamente, portanto, o volume de dados por shard pode variar. Consequentemente, o espaço de armazenamento utilizado em cada DN pode ser diferente.

Quando usar

A fragmentação comum de tabelas é mais indicada nos seguintes cenários:

  • Sua aplicação utiliza um grande número de bancos de dados e tabelas.

  • A maioria das tabelas possui poucas ou nenhuma relação de JOIN entre si.

Caso suas tabelas realizem JOINs frequentes entre si, consulte a seção Limitações antes de ativar este recurso.

Criar um banco de dados com fragmentação comum de tabelas

Para ativar a fragmentação comum de tabelas, crie um banco de dados no modo AUTO com DEFAULT_SINGLE='on':

CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
Nota

Ao criar um banco de dados no modo AUTO pelo console do PolarDB, o SQL gerado pelo sistema não inclui DEFAULT_SINGLE='on'. Para utilizar a fragmentação comum de tabelas, execute manualmente o comando acima. Para mais detalhes, consulte CREATE DATABASE.

Parâmetros de criação do banco de dados

Parâmetro

Descrição

Valor

MODE

Define o modo do banco de dados. Obrigatório para operação distribuída.

'auto'

DEFAULT_SINGLE

Ativa a fragmentação comum de tabelas. Quando definido como 'on', todas as tabelas sem definição explícita de partição são distribuídas automaticamente entre os DNs.

'on' (ativar)

Verifique se o banco de dados foi criado corretamente:

mysql> SHOW CREATE DATABASE autodb1;

Saída esperada:

+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE                                                                                                  |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1  | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

Criar tabelas não particionadas

Crie tabelas em autodb1 sem especificar um esquema de partição. O PolarDB-X fragmenta e distribui essas tabelas automaticamente entre os DNs.

CREATE TABLE sin_t1(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime,
  primary key(id)
);

CREATE TABLE sin_t2(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime,
  primary key(id)
);

CREATE TABLE sin_t3(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime,
  primary key(id)
);

CREATE TABLE sin_t4(
  id bigint not null auto_increment,
  bid int,
  name varchar(30),
  birthday datetime,
  primary key(id)
);

Verificar a distribuição das tabelas

Utilize SHOW TOPOLOGY FROM <table_name> para confirmar em qual DN cada tabela foi atribuída.

sin_t1:

SHOW TOPOLOGY FROM sin_t1\G
           ID: 0
   GROUP_NAME: AUTODB1_P00000_GROUP
   TABLE_NAME: sin_t1_HnMx
PARTITION_NAME: p1
SUBPARTITION_NAME:
  PHY_DB_NAME: autodb1_p00000
       DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default

sin_t2:

SHOW TOPOLOGY FROM sin_t2\G
           ID: 0
   GROUP_NAME: AUTODB1_P00001_GROUP
   TABLE_NAME: sin_t2_IT7l
PARTITION_NAME: p1
SUBPARTITION_NAME:
  PHY_DB_NAME: autodb1_p00001
       DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default

sin_t3:

SHOW TOPOLOGY FROM sin_t3\G
           ID: 0
   GROUP_NAME: AUTODB1_P00000_GROUP
   TABLE_NAME: sin_t3_HmtN
PARTITION_NAME: p1
SUBPARTITION_NAME:
  PHY_DB_NAME: autodb1_p00000
       DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default

sin_t4:

SHOW TOPOLOGY FROM sin_t4\G
           ID: 0
   GROUP_NAME: AUTODB1_P00001_GROUP
   TABLE_NAME: sin_t4_ab7e
PARTITION_NAME: p1
SUBPARTITION_NAME:
  PHY_DB_NAME: autodb1_p00001
       DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default

Os resultados demonstram que o PolarDB-X distribuiu as quatro tabelas entre dois DNs: sin_t1 e sin_t3 residem em polardbx-storage-0-master, enquanto sin_t2 e sin_t4 residem em polardbx-storage-1-master.

Limitações

Desempenho de JOIN

Após a fragmentação comum de tabelas, operações de JOIN entre tabelas fragmentadas podem ficar mais lentas. Como os dados estão distribuídos em diferentes DNs, os JOINs podem não ser enviados eficientemente para DNs individuais.

Para minimizar esse impacto, utilize a fragmentação comum de tabelas apenas para tabelas com poucas ou nenhuma relação de JOIN.

Distribuição desigual de armazenamento

Como as tabelas não particionadas são distribuídas aleatoriamente, o volume de dados por shard pode variar. Isso pode resultar em diferenças no espaço de armazenamento utilizado em cada DN.