Esta página descreve como usar o isolamento de leitura repetível no Spanner.
A leitura repetível é um nível de isolamento que
garante que todas as operações de leitura em uma transação vejam um snapshot consistente
do banco de dados, como ele existia no início da transação. No Spanner, esse nível de isolamento é implementado usando uma técnica que também é comumente chamada de isolamento de snapshot. Essa abordagem é benéfica em cenários de alta simultaneidade de leitura/gravação em que várias transações leem dados que outras transações podem estar modificando. Ao usar um snapshot fixo, a leitura repetível evita os impactos de desempenho do nível de isolamento serializável mais rigoroso. Com a simultaneidade otimista padrão, as leituras podem ser executadas sem adquirir bloqueios e sem bloquear gravações simultâneas, o que resulta em menos transações anuladas que podem precisar ser repetidas devido a conflitos de serialização. Com simultaneidade pessimista,
as operações de leitura usam snapshots, mas bloqueios exclusivos se aplicam a dados lidos de consultas FOR
UPDATE ou dicas lock_scanned_ranges=exclusive e dados gravados com
consultas DML. A simultaneidade pessimista também reduz a probabilidade de conflitos de gravação. Para mais
informações, consulte Visão geral do nível de isolamento e
Controle de simultaneidade.
Definir o nível de isolamento
É possível definir o nível de isolamento em transações de leitura/gravação no nível do cliente do banco de dados ou da transação usando os seguintes métodos:
Bibliotecas de cliente
Go
Java
Node.js
Python
C++
C#
REST
É possível usar a
TransactionOptions.isolation_level
API REST para definir o nível de isolamento em transações de leitura/gravação e somente leitura
no nível da transação. As opções válidas são TransactionOptions.SERIALIZABLE e TransactionOptions.REPEATABLE_READ. Por padrão, o Spanner define o nível de isolamento como serializável.
É possível usar os drivers do Spanner para definir o nível de isolamento e o modo de bloqueio de leitura como um parâmetro de conexão no nível da conexão ou como uma opção de instrução SET no nível da transação. Para mais informações sobre cada
driver, consulte Visão geral dos drivers.
Também é possível configurar a simultaneidade de bloqueio para cada nível de isolamento. Para mais informações, consulte Controle de simultaneidade.
Casos de uso não aceitos
- Não é possível definir o isolamento de leitura repetível em transações DML particionadas.
- Todas as transações somente leitura já operam em um snapshot fixo e não exigem bloqueios. Portanto, a definição do isolamento de leitura repetível nesse tipo de transação não muda nenhum comportamento.
- Não é possível definir o isolamento de leitura repetível em operações somente leitura, de uso único e de partição usando as bibliotecas de cliente do Spanner. As bibliotecas de cliente do Spanner não têm a opção de definir o isolamento de leitura repetível em operações de consulta somente leitura, de uso único e de partição.
A seguir
Saiba mais sobre os níveis de isolamento.
Saiba mais sobre o controle de simultaneidade.
Saiba como usar SELECT FOR UPDATE no isolamento de leitura repetível.
Para saber mais sobre a capacidade de serialização e a consistência externa do Spanner, consulte TrueTime e consistência externa.