Em cargas de trabalho de processamento de transações online (OLTP) com alta concorrência, a lista de transações ativas do MySQL torna-se um gargalo. Cada início de transação, commit e verificação de visibilidade exige a aquisição do trx sys mutex, o que limita o throughput e impede o uso total de múltiplas vCPUs. O PolarDB for MySQL resolve esse problema com o PolarTrans, que substitui a lista de transações ativas pelo Commit Timestamp Store (CTS). Esse mecanismo em memória e livre de bloqueios rastreia o estado das transações usando timestamps de commit em vez de arrays protegidos por mutex.
Este tópico explica o funcionamento do CTS, as melhorias em cada etapa do ciclo de vida da transação e as mudanças de desempenho após a ativação do PolarTrans.
Versões compatíveis
Para ativar o PolarTrans por meio do recurso de consistência global (modo de alto desempenho), seu cluster PolarDB for MySQL Enterprise Edition deve atender a um dos seguintes requisitos de versão:
Versão do mecanismo 8.0.2 com versão de revisão 8.0.2.2.19 ou posterior
Versão do mecanismo 8.0.1 com versão de revisão 8.0.1.1.29 ou posterior
Versão do mecanismo 5.7 com versão de revisão 5.7.1.0.26 ou posterior
Para verificar a versão do seu cluster, consulte a seção "Query the engine version" em Engine versions .
Por que as listas de transações ativas limitam o desempenho
Bancos de dados relacionais tradicionais, como MySQL e PostgreSQL, implementam o Controle de Concorrência Multiversão (MVCC) usando uma lista de transações ativas. Em ambientes de alta concorrência, essa abordagem gera três problemas:
Uso incompleto de múltiplas vCPUs para processar transações concorrentes
Gargalos de desempenho quando muitas transações competem pelo
trx sys mutexSuporte inadequado a consistência de leitura, gravações em múltiplos pontos e gerenciamento de transações Extended Architecture (XA) em arquiteturas shared-nothing
O PolarTrans supera essas limitações ao substituir a lista de transações ativas pelo CTS. Em vez de copiar o estado da transação, o PolarTrans determina a visibilidade com base no timestamp máximo de commit do cluster. Os logs do CTS residem inteiramente em memória: cada transação é mapeada via módulo para um slot específico em um ring buffer conforme seu trx_id. Cada slot armazena um ponteiro trx e um número de sequência de commit (CSN).
Como o CTS melhora cada etapa da transação
A lista de transações ativas exige a aquisição de um trx sys mutex em três pontos críticos do ciclo de vida da transação. O CTS elimina essa necessidade em todas as etapas.
|
Etapa |
Abordagem tradicional |
PolarTrans (CTS) |
|
Início da transação |
Aloca um ID de transação, adiciona-o a |
Registra as informações da transação no log CTS, aloca um |
|
Commit da transação |
Consulta |
Atribui um timestamp de commit e atualiza apenas o campo CSN no log CTS |
|
Determinação de visibilidade |
Copia o array de IDs de transações ativas, registra os IDs mínimo e máximo, consulta o array para determinar a visibilidade da linha — sob |
Compara o CSN da transação somente leitura com o campo |
O PolarTrans implementa algoritmos livres de bloqueios na maior parte da lógica de transação para aumentar o throughput em cenários de leitura e gravação ou apenas gravação.
Comparação de desempenho
O teste a seguir mede as consultas por segundo (QPS) antes e depois da ativação do PolarTrans.
Ambiente de teste:
|
Parâmetro |
Valor |
|
Cluster |
PolarDB for MySQL 8.0, Cluster Edition |
|
Especificações |
88 núcleos, 710 GB de memória |
|
Ferramenta de teste |
Sysbench |
|
Volume de dados |
88 tabelas, 12 milhões de linhas por tabela |
Casos de teste:
Resultados: O PolarTrans aumenta significativamente o QPS em cenários de leitura e gravação e apenas gravação.
Em cenários somente leitura, o PolarTrans não traz melhorias de desempenho. Transações somente leitura já se beneficiam do cache de read view, que reduz a sobrecarga de bloqueios causada pela cópia do estado da transação.
Ative o PolarTrans
O PolarTrans é ativado por padrão ao habilitar o recurso de consistência global (modo de alto desempenho). Para obter instruções de configuração, consulte a seção "Enable global consistency (high-performance mode)" no tópico Visão geral.