Com o log binário ativado, uma transação grande pode monopolizar a fila de gravação do binlog e impedir o commit das demais transações. Isso gera latência em cascata nas gravações, aumento de consultas lentas e picos de conexões. O PolarDB for MySQL oferece gravação otimizada de binlog para transações grandes. Esse recurso redireciona os dados de binlog dessas transações para um arquivo dedicado, permitindo que as outras realizem o commit sem espera.
Versões compatíveis
Este recurso requer o PolarDB for MySQL Enterprise Edition ou Standard Edition com uma das seguintes versões do mecanismo de banco de dados:
PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.42 ou posterior
PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.25 ou posterior
Para verificar a versão do mecanismo do seu cluster, consulte a seção "Query an engine version" em Engine versions 5.6, 5.7, and 8.0 .
Casos de uso
Ative este recurso quando transações grandes forem executadas simultaneamente a outras no mesmo cluster. Ele é adequado para os seguintes cenários:
Clusters com cargas mistas: gravações em lote grandes ou importações massivas de dados coexistem com transações OLTP.
Cargas sensíveis à latência: evita que commits de transações grandes causem picos de latência ou aumento de consultas lentas em transações concorrentes.
Prevenção de picos de conexão: evita que commits de transações grandes acionem novas tentativas no nível da aplicação e elevem o número de conexões.
Como funciona
No momento do commit, cada transação transfere seus dados de binlog do cache em memória para o arquivo de binlog compartilhado. Quando várias transações fazem commit simultaneamente, elas entram em fila para essa gravação. Se uma transação — por exemplo, uma com 1 GB de dados de binlog — ocupar a fila por muito tempo, todas as outras precisarão esperar. Isso causa problemas em cascata: aumento de consultas lentas, locks de gravação mantidos por mais tempo, novas tentativas de operações falhas pelas aplicações e picos no número de conexões.
Ao ativar o recurso, o PolarDB for MySQL redireciona os dados de binlog de qualquer transação grande qualificada para um arquivo dedicado. Isso impede que a transação grande bloqueie outras na fila de gravação, permitindo que transações concorrentes façam commit sem espera.
O arquivo de binlog dedicado possui um cabeçalho padrão que inclui FORMAT_DESCRIPTION_EVENT e PREVIOUS_GTIDS_LOG_EVENT. Ele também contém um placeholder especial chamado IGNORABLE_LOG_EVENT, ignorado automaticamente por sistemas downstream.
Ative gravação otimizada de binlog
Defina loose_enable_large_trx_optimization como ON para ativar o recurso. Use loose_binlog_large_trx_threshold_up para configurar o limiar de tamanho do binlog que aciona a otimização.
Ambos os parâmetros entram em vigor imediatamente, sem necessidade de reiniciar o cluster.
Para obter instruções sobre como definir parâmetros, consulte Configure cluster and node parameters .
|
Parâmetro |
Escopo |
Valor padrão |
Valores válidos |
Descrição |
|
|
Global |
OFF |
OFF, ON |
Ativa ou desativa a gravação otimizada de binlog para transações grandes. |
|
|
Global |
1 GB |
10 MB–300 GB |
Limiar de tamanho do binlog acima do qual uma transação é gravada em um arquivo dedicado em vez do arquivo compartilhado. |
Limitações
Nós de replicação downstream não podem usar replicação multithread baseada em concorrência de banco de dados quando este recurso está ativado. Não defina slave_parallel_workers>0 e slave_parallel_type='DATABASE' simultaneamente. Em vez disso, use slave_parallel_workers>0 com slave_parallel_type='logical_clock'.
Aplica-se também a seguinte limitação:
Não há suporte a checksum para os arquivos de binlog de transações grandes.
Comparação de desempenho
A figura a seguir mostra o tempo necessário para fazer commit de transações grandes em um cluster com armazenamento PSL5, antes e depois de ativar o recurso.

Após a ativação do recurso, o tempo de commit para transações grandes cai substancialmente. Isso elimina a carga intensa de I/O e os locks de gravação prolongados causados anteriormente por esses commits.