Saiba como usar o X-Engine.
Alterar o mecanismo da tabela para X-Engine
Execute a instrução a seguir para alterar o mecanismo de uma tabela de InnoDB para X-Engine.
ALTER TABLE <database name>.<table name> ENGINE xengine;
A instrução ALTER bloqueia operações de escrita (DML e DDL) na tabela durante a conversão do mecanismo.
Crie uma tabela X-Engine
Para criar uma tabela X-Engine em um cluster que utiliza tanto X-Engine quanto InnoDB, especifique o X-Engine como mecanismo de armazenamento. Exemplo de instrução:
CREATE TABLE t1(c1 int primary key , c2 int) ENGINE=xengine;
Ajustar a alocação de recursos de memória
Ajuste a proporção de recursos de memória conforme as necessidades do seu negócio na aba X-Engine (Warm Data) da página do cluster.
A tabela a seguir apresenta configurações recomendadas de proporção de memória para três casos de uso típicos. Ajuste a configuração conforme sua carga de trabalho específica.
|
Caso de uso |
Memória InnoDB (%) |
Memória X-Engine (%) |
|
O InnoDB armazena dados quentes e o X-Engine armazena dados frios. Os dados frios arquivados raramente são acessados. |
80 |
20 |
|
O InnoDB armazena dados quentes e o X-Engine armazena dados mornos. Os dados mornos arquivados ainda sofrem atualizações ou consultas. |
50 |
50 |
|
O InnoDB armazena poucas tabelas e o X-Engine armazena muitas tabelas. Os dados em ambos os mecanismos recebem atualizações ou consultas ativas. |
20 |
80 |
Limitações
O mecanismo de alta compressão (X-Engine) possui limitações relacionadas ao próprio mecanismo e à funcionalidade de transações grandes.
Limitações de recursos do mecanismo
|
Categoria |
Recurso |
Descrição |
|
Recursos SQL |
chave estrangeira |
Não suportado |
|
tabela temporária |
Não suportado |
|
|
coluna gerada |
Não suportado |
|
|
API handler |
Não suportado |
|
|
Colunas e propriedades de colunas |
Número máximo de colunas por tabela |
10.000 |
|
comprimento máximo do registro |
256 MB |
|
|
Tipo de dados GIS |
O X-Engine não suporta nenhum tipo de dados relacionado a GIS, incluindo geometry, point, linestring, polygon, multipoint, multilinestring, multipolygon e geometrycollection. |
|
|
índice |
índice hash |
Não suportado |
|
índice espacial |
Não suportado. Recursos para índices de texto completo também não são suportados. |
|
|
transação |
nível de isolamento de transação |
Os dois níveis de isolamento a seguir são suportados:
|
|
Máximo de linhas por transação |
Por padrão, uma única transação pode conter até 100.000 linhas. Altere esse limite usando o parâmetro |
|
|
savepoint |
Não suportado |
|
|
Transação XA |
Transações XA internas são suportadas. |
|
|
bloqueio |
granularidade de bloqueio |
|
|
Skip Locked |
Não suportado |
|
|
Lock Nowait |
Não suportado |
|
|
conjunto de caracteres |
Conjuntos de caracteres suportados para colunas não indexadas |
Todos os conjuntos de caracteres e collations são suportados para colunas não indexadas. |
|
Conjuntos de caracteres suportados para colunas indexadas |
|
|
|
replicação primária/secundária |
formato de binary log |
Os três formatos a seguir são suportados:
Nota
O formato padrão é row. O uso dos formatos stmt ou mixed pode comprometer a segurança dos dados em cenários específicos de alta concorrência. |
Para quaisquer recursos não listados neste tópico, o X-Engine comporta-se de forma idêntica ao InnoDB.
Limitações de transações grandes
O X-Engine não suporta transações grandes. Quando uma transação modifica 10.000 linhas ou mais, o X-Engine ativa o recurso commit in middle. Esse recurso faz com que o X-Engine confirme internamente a transação atual e inicie uma nova subtransação para continuar a operação. No entanto, o commit in middle não garante estritamente a atomicidade transacional. Fique atento às seguintes implicações:
Ao iniciar uma transação para inserir um grande volume de dados, o recurso
commit in middlepode confirmar uma parte dos dados antes que a transação seja concluída. Esses dados parcialmente confirmados tornam-se visíveis para outras transações simultâneas.-
Não é possível reverter completamente uma transação que o recurso
commit in middletenha confirmado parcialmente.DROP TABLE t1; CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine; BEGIN; call insert_data(12000); // Insert 12,000 rows to trigger commit in middle. The first 10,000 rows are committed. rollback;// The rollback operation can only undo the last 2,000 rows. SELECT COUNT(*) FROM t1; // The query still finds the 10,000 committed rows. +----------+ | COUNT(*) | +----------+ | 10000 | +----------+ 1 row in set (0.00 sec) -
Devido ao recurso
commit in middle, se uma transação inserir e depois excluir um grande número de linhas, a operação DELETE pode não visualizar as linhas recém-inseridas.DROP TABLE t1; CREATE TABLE t1(c1 int primary key , c2 int)ENGINE=xengine; call insert_data(10000); BEGIN; INSERT INTO t1 VALUES(10001,10001), (10002,10002); DELETE FROM t1 WHERE c1 >= 0; // The DELETE operation triggers commit in middle, causing it to miss the rows inserted within the same transaction. commit; SELECT * FROM t1; +-------+-------+ | c1 | c2 | +-------+-------+ | 10001 | 10001 | | 10002 | 10002 | +-------+-------+ 2 rows in set (0.00 sec)
Parâmetros
Modifique os parâmetros na tabela abaixo conforme os requisitos do seu negócio. Para instruções detalhadas, consulte Definir parâmetros de cluster e nó.
O método para modificar parâmetros de cluster do PolarDB difere entre o console e uma sessão de banco de dados. As diferenças são as seguintes:
-
Compatibilidade: Para compatibilidade com arquivos de configuração do MySQL, alguns parâmetros de cluster no console do PolarDB possuem o prefixo loose_.
Procedimento: Localize e modifique os parâmetros que possuem o prefixo
loose_.
-
Em uma sessão de banco de dados (usando a linha de comando ou um cliente)
Procedimento: Ao usar o comando
SETpara modificar um parâmetro em uma sessão de banco de dados, remova o prefixoloose_e utilize o nome original do parâmetro.
|
Categoria |
Parâmetro |
Descrição |
Modificável |
Reinicialização necessária |
|
Desempenho |
xengine_batch_group_max_group_size |
Número máximo de grupos em um pipeline de transações. |
Não |
N/A |
|
xengine_batch_group_max_leader_wait_time_us |
Tempo máximo de espera para o pipeline de transações. |
Não |
N/A |
|
|
xengine_batch_group_slot_array_size |
Tamanho máximo de lote do pipeline de transações. |
Não |
N/A |
|
|
xengine_parallel_read_threads |
Número de threads usadas para varreduras paralelas. |
Sim |
Não |
|
|
xengine_parallel_wal_recovery |
Controla se a recuperação paralela de WAL deve ser ativada. |
Não |
N/A |
|
|
Memória |
xengine_block_cache_size |
Tamanho do cache de blocos para dados de tabela e índices. |
Sim |
Não |
|
xengine_row_cache_size |
Tamanho do cache de linhas. |
Não |
N/A |
|
|
xengine_write_buffer_size |
Tamanho máximo de uma única memtable. |
Não |
N/A |
|
|
xengine_block_size |
Tamanho de um bloco de dados em disco. |
Não |
N/A |
|
|
xengine_db_write_buffer_size |
Limite de tamanho total das memtables ativas em todas as subtabelas. |
Não |
N/A |
|
|
xengine_db_total_write_buffer_size |
Limite de tamanho total das memtables ativas e imutáveis em todas as subtabelas. |
Sim |
Não |
|
|
xengine_scan_add_blocks_limit |
Número de blocos que podem ser adicionados ao cache de blocos para cada solicitação de varredura de intervalo. |
Sim |
Não |
|
|
Compactação |
xengine_flush_delete_percent_trigger |
Número de registros que aciona uma troca de memtable. |
Não |
N/A |
|
Bloqueio |
xengine_max_row_locks |
Número máximo de linhas que uma única solicitação SQL pode bloquear. |
Não |
N/A |
|
xengine_lock_wait_timeout |
Período de tempo limite de espera de bloqueio. |
Sim |
Não |