Nesta página, descrevemos 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 também 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 no 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 potencialmente menos transações canceladas que podem precisar ser repetidas devido a conflitos de serialização. Com a concorrência pessimista, as operações de leitura usam snapshots, mas os bloqueios exclusivos são aplicados aos dados lidos de consultas FOR
UPDATE ou dicas lock_scanned_ranges=exclusive e aos dados gravados com consultas DML. A simultaneidade pessimista também reduz a probabilidade de conflitos de gravação-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 e 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 API REST
TransactionOptions.isolation_level
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 repetida em transações DML particionadas.
- Todas as transações somente leitura já operam em um snapshot fixo e não exigem bloqueios. Portanto, definir o 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.
Saiba mais sobre a capacidade de serialização e a consistência externa do Spanner em TrueTime e consistência externa.