A página descreve e explica como usar concessões de leitura do Spanner. Os bloqueios de leitura ajudam seus bancos de dados a reduzir a latência de leitura em regiões não líderes para transações que exigem consistência forte.
Por padrão, quando o Spanner recebe uma solicitação de leitura forte em uma região não líder, a réplica que atende à leitura entra em contato com a região de leitura/gravação líder da instância. Esse contato confirma que os dados estão atualizados antes de atender à solicitação. Esse processo gera uma ida e volta de rede entre a região que recebe a solicitação e a região líder. Ao contrário da comunicação em uma única região, a distância geográfica entre regiões adiciona mais latência à solicitação.
O uso de concessões de leitura do Spanner elimina a necessidade dessa ida e volta. Ao definir uma ou mais regiões de concessão de leitura para seu banco de dados, o Spanner concede o direito de veicular leituras localmente para uma ou mais regiões não líderes, de leitura e gravação ou somente leitura. Isso permite que as regiões não líderes forneçam leituras consistentes diretamente sem se comunicar com a região líder. Veicular leituras consistentes de uma região não líder mais próxima do cliente reduz a latência em todas as regiões. Isso alcança a latência intrarregional para leituras consistentes em instâncias birregionais ou multirregionais.
Ativar ou desativar o recurso de concessões de leitura em uma região não exige tempo de inatividade. No entanto, as gravações têm uma latência maior quando você usa o recurso, porque a ativação do bloqueio de leitura exige que o líder entre em contato com as regiões de bloqueio de leitura ao veicular gravações. Como efeito colateral, as gravações mantêm bloqueios por mais tempo, o que pode afetar cargas de trabalho de gravação de alta disputa. Para mais informações, consulte Quando usar concessões de leitura. O lease de leitura é mais adequado para aplicativos que aceitam trocar o aumento da latência de gravação por leituras consistentes mais rápidas. Por exemplo, um sistema de controle de acesso em que a carga de trabalho tem leituras frequentes, mas gravações raras.
Para saber como ativar concessões de leitura em uma região não líder, consulte Usar concessões de leitura.
Quando usar concessões de leitura
Ative os bloqueios de leitura se o aplicativo e a carga de trabalho atenderem aos seguintes critérios:
- A baixa latência para leituras fortes é mais importante do que para gravações.
- Sua carga de trabalho pode tolerar durações mais longas de bloqueio de gravação ou tem baixa disputa de gravação.
Ativar concessões de leitura aumenta a latência de gravação, o que faz com que os bloqueios de gravação sejam mantidos por mais tempo. Se a carga de trabalho de gravação já tiver alta contenção de gravação, esse recurso poderá piorar a latência de gravação e reduzir a capacidade de processamento.
Quando há gravações simultâneas, a escolha entre usar as APIs de consulta ou as APIs de leitura afeta o desempenho de um banco de dados que usa regiões de concessão de leitura.
A execução de instruções SQL no Spanner envolve a leitura de dados de várias linhas ou intervalos. Ao usar APIs de consulta com concessões de leitura ativadas, as leituras precisam aguardar gravações simultâneas para garantir a correção. Consequentemente, você pode observar maior latência, especialmente quando há mais carga de gravação. As APIs de leitura geralmente são mais tolerantes a gravações simultâneas do que as APIs de consulta. Se você usa APIs de consulta com frequência e cargas de gravação altas, considere reduzir a frequência de gravações ou usar leituras obsoletas.
As APIs de leitura são otimizadas para ler linhas ou intervalos de dados específicos. Eles só precisam esperar pelas gravações que modificam os dados exatos que estão tentando ler. Se você estiver usando APIs de leitura, apenas gravações nos mesmos intervalos de dados vão bloquear suas leituras. Como resultado, quando há gravações simultâneas e você usa regiões de concessão de leitura, as leituras fortes do Spanner têm melhor desempenho e menor latência.
Para saber mais sobre a latência de monitoramento, consulte Monitorar.
Exemplo de caso de uso:
Considere um aplicativo implantado globalmente que realiza gravações nos EUA e tem clientes nos EUA, na Europa e na Ásia. É possível configurar uma instância multirregional do Spanner, como nam-eur-asia1
, com uma região líder em us-central1
e réplicas somente leitura em europe-west1
e asia-east1
.
Quando você ativa o bloqueio de leitura nas regiões somente leitura europe-west1
e asia-east1
, o Spanner veicula leituras consistentes da Europa e da Ásia dessas réplicas locais, reduzindo a latência. A desvantagem é um aumento na latência de gravação para todas as gravações. O aumento da latência é equivalente ao tempo de ida e volta entre a região líder us-central1
e as regiões de concessão de leitura mais distantes.
Limitações
As concessões de leitura do Spanner têm as seguintes limitações:
- Não é possível ativar o lease de leitura em uma região de testemunha.
- Não é possível usar concessão de leitura com particionamento geográfico.
- Os bloqueios de leitura não reduzem a latência das leituras que fazem parte de uma transação de leitura e gravação. Mesmo que uma transação de leitura e gravação contenha apenas leituras, elas ainda serão atendidas pela região líder.
- Se você mover sua instância para uma configuração de instância diferente, as configurações de concessão de leitura não serão preservadas. Você precisa reativar o lease de leitura no banco de dados após a conclusão da movimentação.
Usar concessões de leitura
É necessário ativar os bloqueios de leitura antes de usar esse recurso.
Controle de acesso com o IAM
Para definir regiões de concessão de leitura, um usuário precisa da permissão do IAM spanner.databases.create
ou spanner.databases.updateDdl
. O papel predefinido de administrador de banco de dados (roles/spanner.databaseAdmin
) inclui essas permissões. Para mais informações, consulte a
visão geral do IAM para o Spanner.
Para informações sobre como conceder permissões, consulte Aplicar permissões do IAM.
Antes de começar para usuários do banco de dados PostgreSQL
Se você quiser usar o bloqueio de leitura em um banco de dados PostgreSQL, faça uma das seguintes mudanças de configuração no banco de dados. Caso contrário, suas leituras ainda serão atendidas pela região líder, mesmo que você tenha definido regiões de concessão de leitura.
Se você usar apenas transações somente leitura, configure sua conexão do PostgreSQL para que o status padrão de cada nova transação no banco de dados seja definido como somente leitura. Para fazer isso, defina a opção
default_transaction_read_only
comotrue
.postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \ default_transaction_read_only=true host=/tmp port=5432 database=DATABASE_ID \ options='-c default_transaction_read_only=true'
Substitua:
USER_ID com o identificador exclusivo do usuário.
PASSWORD com sua senha.
DATABASE_ID com o identificador exclusivo do banco de dados.
Ativar concessões de leitura
Para ativar os bloqueios de leitura ao criar um banco de dados, defina a opção
read_lease_regions
na instrução DDL ALTER DATABASE
(GoogleSQL,
PostgreSQL):
Console
Acesse a página Instâncias no Google Cloud console.
Selecione a instância em que você quer ativar o bloqueio de leitura.
Na página Visão geral da instância que será aberta, clique em Criar banco de dados.
Em nome do banco de dados, insira um nome.
Selecione um dialeto de banco de dados.
Clique em Criar.
O console Google Cloud mostra a página Visão geral do banco de dados que você criou.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Nova guia ou use a guia do editor vazia.Insira a seguinte instrução DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Substitua:
DATABASE_ID com o identificador exclusivo do seu banco de dados.
READ_LEASE_REGION pela região em que você quer ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Substitua:
DATABASE_ID com o identificador exclusivo do seu banco de dados.
READ_LEASE_REGION pela região em que você quer ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
Clique em Executar.
gcloud
Para definir a opção de banco de dados read_lease_regions
ao criar seu banco de dados,
use gcloud spanner databases create
.
GoogleSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Substitua:
DATABASE_ID
: o identificador permanente do seu banco de dados do Spanner.INSTANCE_ID
: identificador permanente da sua instância do Spanner.READ_LEASE_REGION
: a região em que você quer ativar o bloqueio de leitura. Por exemplo,europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
gcloud spanner databases create DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Substitua:
DATABASE_ID
: o identificador permanente do seu banco de dados do Spanner.INSTANCE_ID
: identificador permanente da sua instância do Spanner.READ_LEASE_REGION
: a região em que você quer ativar o bloqueio de leitura. Por exemplo,europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
Para ativar o bloqueio de leitura ao atualizar um banco de dados, defina a opção
read_lease_regions
na instrução DDL ALTER DATABASE
(GoogleSQL,
PostgreSQL):
Console
Acesse a página Instâncias no Google Cloud console.
Selecione a instância em que você quer ativar o bloqueio de leitura.
Selecione o banco de dados em que você quer ativar o bloqueio de leitura.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Nova guia ou use a guia do editor vazia.Insira a seguinte instrução DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID \ SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
Substitua:
DATABASE_ID com o identificador exclusivo do seu banco de dados.
READ_LEASE_REGION pela região em que você quer ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
ALTER DATABASE DATABASE_ID \ SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
Substitua:
DATABASE_ID com o identificador exclusivo do seu banco de dados.
READ_LEASE_REGION pela região em que você quer ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
Clique em Executar.
gcloud
Para definir a opção de banco de dados read_lease_regions
, use
gcloud spanner databases ddl update
.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"
Substitua:
DATABASE_ID
: o identificador permanente do seu banco de dados do Spanner.INSTANCE_ID
: identificador permanente da sua instância do Spanner.- READ_LEASE_REGION pela região em que você quer
ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID \
SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"
Substitua:
DATABASE_ID
: o identificador permanente do seu banco de dados do Spanner.INSTANCE_ID
: identificador permanente da sua instância do Spanner.- READ_LEASE_REGION pela região em que você quer
ativar o lease de leitura. Por exemplo,
europe-west1
. É possível ativar o bloqueio de leitura para várias regiões. Separe cada região com uma vírgula.
Desativar concessões de leitura
O bloqueio de leitura fica desativado por padrão.
Para atualizar e desativar o recurso em um banco de dados atual, defina a opção read_lease_regions
na instrução DDL ALTER DATABASE
(GoogleSQL, PostgreSQL) como NULL
:
Console
Acesse a página Instâncias no Google Cloud console.
Selecione a instância em que você quer desativar o bloqueio de leitura.
Selecione o banco de dados em que você quer desativar o bloqueio de leitura.
No menu de navegação, clique em Spanner Studio.
Na página Spanner Studio, clique em
Nova guia ou use a guia do editor vazia.Insira a seguinte instrução DDL
ALTER DATABASE
.GoogleSQL
ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
Substitua DATABASE_ID pelo identificador exclusivo do seu banco de dados.
PostgreSQL
ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
Substitua DATABASE_ID pelo identificador exclusivo do seu banco de dados.
Clique em Executar.
gcloud
Para definir a opção de banco de dados read_lease_regions
, use
gcloud spanner databases ddl update
.
GoogleSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"
Substitua:
DATABASE_ID
: o identificador permanente do banco de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.
PostgreSQL
gcloud spanner databases ddl update DATABASE_ID \
--instance=INSTANCE_ID \
--ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"
Substitua:
DATABASE_ID
: o identificador permanente do banco de dados do Spanner.INSTANCE_ID
: o identificador permanente da sua instância do Spanner.
Práticas recomendadas
Para maximizar os benefícios do uso desse recurso, use sessões multiplexadas, que permitem criar um grande número de solicitações simultâneas em uma única sessão.
Monitoramento
Depois de ativar o lease de leitura, é importante monitorar a latência para confirmar se o recurso está funcionando como esperado. Para isso, identifique a região líder e as regiões com concessão de leitura ativada consultando a tabela de esquema de informações data_options
(GoogleSQL, PostgreSQL) ou seu banco de dados. As regiões com concessão de leitura ativada esperam que as leituras consistentes tenham latência intrarregional. Ao mesmo tempo, a latência de gravação aumenta entre a região líder e a região mais distante com concessão de leitura ativada.
Você também pode usar a seguinte métrica de latência do Spanner para monitorar as latências de solicitação de leitura nas suas instâncias:
spanner.googleapis.com/api/read_request_latencies_by_serving_location
É possível filtrar essa métrica usando o campo /serving_location
. O campo
/serving location
indica o local do servidor
do Spanner em que a solicitação é veiculada.
Para uma lista completa das métricas disponíveis, consulte a Lista de métricas do Spanner.
Considerações sobre o custo
Leituras consistentes disponibilizadas em regiões com o recurso de concessão de leitura ativado usam um pouco menos recursos de computação. Por outro lado, as gravações em bancos de dados com o recurso de concessão de leitura ativado usam um pouco mais de recursos de computação. Para mais informações, consulte Preços da capacidade de computação do Spanner.
O recurso não afeta outros componentes de preços, como armazenamento e rede.
A seguir
- Saiba mais sobre a replicação do Spanner.
- Saiba mais sobre leituras fora das transações.