O atributo LOCALITY controla onde o PolarDB-X armazena dados ao vincular bancos de dados, tabelas ou partições a nós de dados (DNs) específicos. Use esse recurso para isolar cargas de trabalho entre unidades de negócio, balancear tabelas não particionadas entre nós ou fixar partições específicas em um armazenamento dedicado.
Casos de uso
Isolamento de carga de trabalho: Atribua bancos de dados diferentes a nós de dados distintos para evitar que unidades de negócio compitam pelos mesmos recursos de armazenamento.
Balanceamento de carga de tabela única: Distribua tabelas não particionadas entre os nós de dados para evitar sobrecarga no nó padrão (
dn-0).Particionamento geográfico: Armazene dados de regiões diferentes em nós dedicados usando particionamento LIST. Por exemplo, mantenha pedidos de Xangai e Pequim em um nó de alto desempenho enquanto outras regiões compartilham os nós restantes.
Isolamento de dados quentes: Após dividir uma partição quente, fixe a nova partição em um nó dedicado para separar fisicamente os dados quentes dos frios.
Como funciona o LOCALITY
LOCALITY é um atributo de objeto de banco de dados (banco de dados, tabela ou partição) que especifica quais nós de dados podem armazenar seus dados. Defina-o usando dn=<node-id-list> ou balance_single_table=on.
O LOCALITY aplica-se em quatro níveis:
|
Nível |
O que controla |
|
Banco de dados |
Todas as tabelas e partições do banco de dados são distribuídas apenas pelos nós especificados |
|
Tabela |
Os dados da tabela ficam restritos aos nós especificados, independentemente de outras tabelas no mesmo banco de dados |
|
Partição |
Partições individuais são fixadas em nós específicos; outras partições na mesma tabela seguem o LOCALITY no nível de tabela |
|
Tabela não particionada |
|
Como escolher o valor correto de LOCALITY:
|
Valor |
Quando usar |
|
|
Isole um banco de dados, tabela ou partição em nós específicos |
|
|
Distribua automaticamente tabelas não particionadas entre vários nós de dados (apenas no nível de tabela) |
|
|
Limpe uma atribuição de LOCALITY existente e permita que o PolarDB-X gerencie o posicionamento automaticamente |
Após definir o LOCALITY, a maioria das operações DDL (scale-out, alterações de partição) respeita a restrição. Duas operações ignoram o LOCALITY: exclusão de um nó de dados e restauração de dados a partir de um backup. Em ambos os casos, o valor de LOCALITY afetado torna-se inválido automaticamente.
Alterar o LOCALITY de um grupo de tabelas ou grupo de partições aciona uma tarefa de migração de dados assíncrona. A atualização dos metadados é imediata; a movimentação real dos dados ocorre em segundo plano.
Pré-requisitos
Antes de começar, verifique se:
A versão do kernel da sua instância PolarDB-X é 5.4.14 ou posterior. Para verificar, consulte Visualize e atualize a versão de uma instância.
O banco de dados lógico usa o modo AUTO.
Restrições
Ao excluir um nó de dados, qualquer atributo LOCALITY que referencie o ID desse nó torna-se inválido automaticamente.
Ao restaurar dados de um backup, o atributo LOCALITY original dos objetos restaurados torna-se inválido automaticamente.
Os nós de dados especificados em um LOCALITY no nível de tabela devem pertencer ao conjunto de nós de dados do banco de dados.
Para tabelas não particionadas, especifique apenas um nó de dados no atributo LOCALITY.
Se uma tabela pertencer a um grupo de tabelas, seu LOCALITY deve corresponder aos valores de LOCALITY do grupo de tabelas, da partição e do grupo de partições.
Por padrão, uma tabela lógica, seu grupo de tabelas, seus índices secundários globais (GSIs) e o grupo de tabelas GSI compartilham o mesmo valor de LOCALITY.
Os nós de dados especificados para partições individuais devem pertencer ao conjunto de nós de dados do banco de dados, mas não precisam constar no LOCALITY no nível de tabela.
Os locais de armazenamento de um banco de dados devem incluir o nó de dados com número de série 0 (por exemplo,
polardbx-ng28-dn-0). Essa restrição não se aplica a tabelas ou partições.
Visualize informações do nó de dados
Antes de especificar o LOCALITY, verifique quais nós de dados estão disponíveis e anote seus IDs.
SHOW STORAGE;
Saída de exemplo:
+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| STORAGE_INST_ID | LEADER_NODE | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| polardbx-ng28-dn-0 | polardbx-ng28-dn-0-cands-0:14289 | true | MASTER | 1 | 2 | 0 | false | null | null |
| polardbx-ng28-dn-1 | polardbx-ng28-dn-1-cands-0:14176 | true | MASTER | 1 | 1 | 0 | true | null | null |
| polardbx-ng28-dn-2 | polardbx-ng28-dn-2-cands-0:14568 | true | MASTER | 1 | 1 | 0 | true | null | null |
| polardbx-ng28-dn-3 | polardbx-ng28-dn-3-cands-0:16796 | true | MASTER | 1 | 1 | 0 | true | null | null |
| polardbx-ng28-gms | polardbx-ng28-dn-0-cands-0:14289 | true | META_DB | 2 | 2 | 0 | false | null | null |
+--------------------+----------------------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
Colunas principais:
|
Coluna |
Descrição |
|
|
ID do nó de dados. Use este valor ao especificar o LOCALITY. |
|
|
Tipo de nó. |
|
|
|
|
|
Indica se o nó pode ser excluído. |
Defina LOCALITY ao criar objetos
Crie um banco de dados com LOCALITY
Especifique os nós de dados ao criar um banco de dados para isolar seus dados de outros bancos de dados na mesma instância PolarDB-X.
CREATE DATABASE db1
LOCALITY = 'dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1,polardbx-ng28-dn-2'
MODE = 'auto';
Para a sintaxe completa, consulte CREATE DATABASE.
Verifique o resultado:
mysql> SHOW CREATE DATABASE `db1`;
+----------+--------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE |
+----------+--------------------------------------------------------------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /* MODE = 'auto' LOCALITY = "dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1,polardbx-ng28-dn-2" */ |
+----------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)
mysql> SHOW DS;
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
| ID | STORAGE_INST_ID | DB | GROUP | PHY_DB | MOVABLE |
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
| 0 | polardbx-ng28-dn-0 | db1 | DB1_P00000_GROUP | db1_p00000 | 1 |
| 1 | polardbx-ng28-dn-1 | db1 | DB1_P00001_GROUP | db1_p00001 | 1 |
| 2 | polardbx-ng28-dn-2 | db1 | DB1_P00002_GROUP | db1_p00002 | 1 |
| 3 | polardbx-ng28-gms | information_schema | INFORMATION_SCHEMA_SINGLE_GROUP | polardbx_info_schema | 0 |
+----+--------------------+--------------------+---------------------------------+----------------------+---------+
4 rows in set (0.04 sec)
Os locais de armazenamento de um banco de dados devem incluir o nó de dados com número de série 0 ( dn-0 ). Essa restrição não se aplica a tabelas ou partições individuais.
Distribuir tabelas não particionadas uniformemente entre os nós
Quando há muitas tabelas não particionadas, elas usam como padrão o dn-0, o que cria um desequilíbrio de armazenamento. Use balance_single_table=on para permitir que o PolarDB-X as distribua automaticamente com base no número de tabelas não particionadas e na quantidade de dados em cada nó de dados.
CREATE TABLE t_sgl1 (
`id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext DEFAULT NULL,
`order_detail` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';
CREATE TABLE t_sgl2 (
`id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext DEFAULT NULL,
`order_detail` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';
CREATE TABLE t_sgl3 (
`id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext DEFAULT NULL,
`order_detail` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';
CREATE TABLE t_sgl4 (
`id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext DEFAULT NULL,
`order_detail` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) SINGLE locality = 'balance_single_table=on';
Para a sintaxe completa, consulte CREATE TABLE (modo AUTO).
Verifique a topologia para confirmar que cada tabela foi alocada em um nó diferente:
mysql> SHOW TOPOLOGY `t_sgl1`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------+----------------+-------------+--------------------+
| 1 | DB1_P00001_GROUP | t_sgl1_92mv_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
mysql> SHOW TOPOLOGY `t_sgl2`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------+----------------+-------------+--------------------+
| 1 | DB1_P00002_GROUP | t_sgl2_87fg_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
+----+------------------+--------------------+----------------+-------------+--------------------+
mysql> SHOW TOPOLOGY `t_sgl3`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------+----------------+-------------+--------------------+
| 1 | DB1_P00002_GROUP | t_sgl3_64uj_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
mysql> SHOW TOPOLOGY `t_sgl4`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------+----------------+-------------+--------------------+
| 1 | DB1_P00001_GROUP | t_sgl4_71mb_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
+----+------------------+--------------------+----------------+-------------+--------------------+
As quatro tabelas são distribuídas automaticamente entre dn-1 e dn-2.
Crie uma tabela lógica com LOCALITY
Fixe os dados de uma tabela lógica em nós específicos para isolá-la de outras tabelas no mesmo banco de dados. O LOCALITY é compatível com tabelas não particionadas e tabelas que usam particionamento RANGE, HASH ou LIST.
CREATE TABLE t_order (
`id` bigint(11) NOT NULL AUTO_INCREMENT BY GROUP,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext DEFAULT NULL,
`order_detail` longtext DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `l_i_order` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
locality = 'dn=polardbx-ng28-dn-1,polardbx-ng28-dn-2';
Verifique o resultado:
mysql> SHOW CREATE TABLE `t_order`;
+---------+---------------------------------------------------------------------------------------+
| TABLE | CREATE TABLE |
+---------+---------------------------------------------------------------------------------------+
| t_order | CREATE TABLE `t_order` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext,
`order_detail` longtext,
PRIMARY KEY (`id`),
INDEX `l_i_order` (`order_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8
/* LOCALITY='dn=polardbx-ng28-dn-1,polardbx-ng28-dn-2' */ |
+---------+---------------------------------------------------------------------------------------+
1 row in set (0.05 sec)
mysql> SHOW TOPOLOGY `t_order`;
+----+------------------+--------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------+----------------+-------------+--------------------+
| 0 | DB1_P00002_GROUP | t_order_18dV_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00001_GROUP | t_order_18dV_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
| 2 | DB1_P00001_GROUP | t_order_18dV_00002 | p3 | db1_p00001 | polardbx-ng28-dn-1 |
+----+------------------+--------------------+----------------+-------------+--------------------+
3 rows in set (0.15 sec)
Defina LOCALITY por partição
Especifique um nó de dados para cada partição a fim de direcionar os dados para um armazenamento dedicado com base na lógica de negócios. Por exemplo, armazene partições de alta prioridade em um nó específico.
O exemplo a seguir direciona p1 (Xangai) e p2 (Pequim) para dn-2 e distribui as partições restantes entre dn-0 e dn-1.
CREATE TABLE orders_region (
order_id int AUTO_INCREMENT PRIMARY KEY,
customer_id int,
country varchar(64),
city varchar(64),
order_time datetime NOT NULL
)
PARTITION BY LIST COLUMNS(country, city)
(
PARTITION p1 VALUES IN (('China','Shanghai')) LOCALITY = 'dn=polardbx-ng28-dn-2',
PARTITION p2 VALUES IN (('China','Beijing')) LOCALITY = 'dn=polardbx-ng28-dn-2',
PARTITION p3 VALUES IN (('China','Hangzhou')),
PARTITION p4 VALUES IN (('China','Nanjing')),
PARTITION p5 VALUES IN (('China','Guangzhou')),
PARTITION p6 VALUES IN (('China','Shenzhen')),
PARTITION p7 VALUES IN (('China','Wuhan')),
PARTITION p8 VALUES IN (('America','New York'))
) LOCALITY = 'dn=polardbx-ng28-dn-0,polardbx-ng28-dn-1';
Verifique a topologia:
mysql> SHOW TOPOLOGY `orders_region`;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------------+----------------+-------------+--------------------+
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00001_GROUP | orders_region_RlsY_00003 | p4 | db1_p00001 | polardbx-ng28-dn-1 |
| 3 | DB1_P00001_GROUP | orders_region_RlsY_00004 | p5 | db1_p00001 | polardbx-ng28-dn-1 |
| 4 | DB1_P00001_GROUP | orders_region_RlsY_00006 | p7 | db1_p00001 | polardbx-ng28-dn-1 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.25 sec)
As partições p1 e p2 estão em dn-2; as demais estão distribuídas entre dn-0 e dn-1.
Os nós de dados especificados para partições devem pertencer ao conjunto de nós de dados do banco de dados. Eles não precisam constar no LOCALITY no nível de tabela.
Alterar LOCALITY
Escolha o nível certo para atualizar
|
Alvo da alteração |
Comando |
Aciona migração de dados |
|
Grupo de tabelas |
|
Sim (assíncrono) |
|
Grupo de partições |
|
Sim (assíncrono) |
|
Tabela individual |
|
Sim |
Alterar o LOCALITY de um grupo de tabelas
ALTER TABLEGROUP identifier SET LOCALITY = locality_option
-- locality_option:
-- 'dn=storage_inst_id_list'
-- ''
Exemplo: altere o LOCALITY de tg3 (que contém orders_region):
ALTER TABLEGROUP `tg3` SET LOCALITY = 'dn=polardbx-ng28-dn-0';
Após a alteração, o PolarDB-X atualiza imediatamente os metadados e inicia uma tarefa de rebalanceamento em segundo plano. Acompanhe o progresso da migração:
SELECT * FROM information_schema.ddl_plan WHERE table_schema = 'db1';
Saída de exemplo:
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+
| ID | plan_id | job_id | table_schema | ddl_stmt | state | ddl_type | progress | retry_count | result | extras | gmt_created | gmt_modified | resource |
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+
| 1 | 1465819565798723584 | 1465819579241467904 | db1 | REBALANCE TABLEGROUP `tg3` EXPLAIN=false ASYNC=true DEBUG=false | SUCCESS | REBALANCE | 100 | 0 | | | 2022-05-24 14:37:58 | 2022-05-24 14:38:11 | tablegroup:tg3 |
+----+---------------------+---------------------+--------------+------------------------------------------------------------------+---------+-----------+----------+-------------+--------+--------+---------------------+---------------------+----------------+
A coluna progress mostra a porcentagem de conclusão; state=SUCCESS indica que a migração foi concluída.
Verifique a topologia final:
mysql> SHOW TOPOLOGY `orders_region`;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------------+----------------+-------------+--------------------+
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3 | db1_p00000 | polardbx-ng28-dn-0 |
| 3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4 | db1_p00000 | polardbx-ng28-dn-0 |
| 4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5 | db1_p00000 | polardbx-ng28-dn-0 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.17 sec)
As partições p1 e p2 mantiveram seu nó original (dn-2) porque tinham LOCALITY explícito definido na criação. Todas as outras partições foram movidas para dn-0.
Alterar o LOCALITY de um grupo de partições
Atualize a atribuição de nó de uma única partição sem afetar as outras partições.
ALTER TABLEGROUP identifier SET PARTITIONS part_name LOCALITY = locality_option
-- locality_option:
-- 'dn=storage_inst_id_list'
-- ''
Exemplo: mova a partição p3 de orders_region (no grupo de tabelas tg3) para dn-1:
ALTER TABLEGROUP `tg3` SET PARTITIONS p3 LOCALITY = 'dn=polardbx-ng28-dn-1';
Verifique:
mysql> SHOW TOPOLOGY orders_region;
+----+------------------+--------------------------+----------------+-------------+--------------------+
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+----+------------------+--------------------------+----------------+-------------+--------------------+
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00001_GROUP | orders_region_RlsY_00002 | p3 | db1_p00001 | polardbx-ng28-dn-1 |
| 3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4 | db1_p00000 | polardbx-ng28-dn-0 |
| 4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5 | db1_p00000 | polardbx-ng28-dn-0 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+----+------------------+--------------------------+----------------+-------------+--------------------+
8 rows in set (0.11 sec)
Alterar o LOCALITY de uma tabela
Para remover o LOCALITY balance_single_table=on de uma tabela não particionada e convertê-la em uma tabela particionada, limpe explicitamente o LOCALITY durante o reparticionamento:
ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 32 LOCALITY = "";
Para alterar tanto o particionamento quanto a atribuição de nó simultaneamente:
ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 8 LOCALITY = "dn=dn1";
Alterar o LOCALITY de uma tabela aciona a migração de dados.
Como as operações de partição afetam o LOCALITY
O modo AUTO suporta ALTER TABLEGROUP e outras operações de modificação de partição. Para obter detalhes, consulte ALTER TABLEGROUP e Alterar o tipo e a regra de particionamento de uma tabela.
Após uma modificação de partição, novos grupos de partições e grupos de tabelas herdam o valor original de LOCALITY. As operações a seguir são exceções em que o LOCALITY é alterado:
|
Operação |
Objeto |
LOCALITY após a operação |
|
Alterar a estratégia de particionamento |
Tabela |
Inalterado |
|
Alterar o tipo de tabela |
Tabela |
Inalterado apenas ao converter uma tabela não particionada em uma tabela particionada. Todas as outras alterações de tipo limpam o LOCALITY. |
|
Migrar partições |
Grupo de partições |
Inalterado |
|
Mesclar partições |
Grupo de partições |
Herdado apenas se todas as partições mescladas compartilharem o mesmo valor de LOCALITY; caso contrário, é limpo |
|
Dividir uma partição |
Grupo de partições |
Inalterado |
|
Dividir uma partição por valor quente |
Grupo de partições |
Limpo |
|
Extrair dados quentes de uma partição |
Grupo de partições |
Limpo |
|
Exclua uma partição |
Grupo de partições |
— |
|
Adicionar uma partição |
Grupo de partições |
Inalterado |
|
Modificar partições (particionamento LIST) |
Grupo de partições |
Inalterado |
|
Renomear uma partição |
Grupo de partições |
Inalterado |