Ao usar um endpoint de cluster no modo de leitura e gravação, alguns drivers de cliente de banco de dados — como o driver Java Database Connectivity (JDBC) — encapsulam automaticamente cada solicitação em uma transação. Consequentemente, todo o tráfego, inclusive consultas somente leitura, vai para o nó primário. Os nós somente leitura permanecem ociosos enquanto o nó primário processa carga desnecessária, sem que alterações de código resolvam o problema.
A divisão de transações permite que o PolarProxy encaminhe solicitações de leitura dentro de uma transação para os nós somente leitura, redistribuindo a carga sem exigir modificações no código da aplicação. Esse recurso também ajuda a garantir a consistência entre leituras e gravações.
Como funciona
Por padrão, o PolarProxy envia todas as solicitações de uma sessão para o nó primário quando se usa um endpoint de cluster no modo de leitura e gravação. Como drivers como o JDBC encapsulam todas as solicitações em transações, até mesmo as consultas somente leitura atingem o nó primário, independentemente de envolverem operações de escrita.

Com a divisão básica de transações ativada, o PolarProxy separa as leituras das gravações dentro de cada transação:
O sistema encaminha as solicitações de leitura recebidas antes da primeira solicitação de gravação em uma transação aos nós somente leitura.
Após a chegada da primeira solicitação de gravação, o sistema envia todas as solicitações subsequentes — tanto de leitura quanto de gravação — ao nó primário para preservar a consistência dos dados.
Dados não confirmados nunca ficam visíveis nos nós somente leitura.

Quando usar a divisão de transações
A divisão de transações oferece maior eficácia nas seguintes situações:
Sua aplicação usa um endpoint de cluster no modo de leitura e gravação.
A carga de trabalho consiste predominantemente em leituras.
O driver encapsula automaticamente as leituras em transações — por exemplo, aplicações JDBC com
autoCommit=false.
Esse recurso não traz benefícios caso sua aplicação já direcione as leituras diretamente para um endpoint somente leitura ou se a carga de trabalho for majoritariamente composta por gravações.
Limitações
Nível de isolamento: Apenas transações que usam o nível de isolamento Read Committed podem ser divididas. Outros níveis (como Repeatable Read ou Serializable) exigem que a sessão permaneça fixa em um único nó para garantir a consistência baseada em um snapshot estável, impossibilitando a divisão.
Interação com o nível de consistência: Se o nível de consistência não estiver defina como eventual consistency, o PolarProxy enviará leituras pré-gravação aos nós somente leitura apenas após esses nós sincronizarem completamente os dados com o nó primário. Caso haja atraso na sincronização, o PolarProxy voltará a enviar as leituras para o nó primário. Para mais detalhes, consulte Níveis de consistência.
Ative divisão de transações
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster PolarDB for PostgreSQL (Compatible with Oracle) com pelo menos um nó somente leitura
Um endpoint de cluster configurado no modo de leitura e gravação
Procedimento
Faça login no console do PolarDB.
No canto superior esquerdo, selecione a região onde seu cluster está implantado.
Localize o cluster e clique em seu ID.
Na seção Cluster Endpoints, clique em Modify.
-
Clique em On ao lado de Transaction Splitting.
A divisão de transações entra em vigor apenas para novas conexões. Para aplicar a alteração às conexões existentes, feche-as e reconecte-se.

Clique em OK.
Referência de API
|
Operação |
Descrição |
|
Modifica os atributos do endpoint de cluster, incluindo modo de leitura/gravação, nível de consistência, divisão de transações e a opção de descarregar solicitações de leitura do nó primário. Também permite especifique se o endpoint deve ser associado a novos nós adicionados. |