Para ajudar você a entender melhor, otimizar e diagnosticar problemas de transações, o Spanner dá acesso às estatísticas de confirmação de transação. Atualmente, é possível recuperar o número total de mutações de uma transação.
Quando usar estatísticas de confirmação
Conhecer a contagem de mutações de uma transação pode ser útil nos cenários a seguir.
Otimizar para viagens de ida e volta
Para melhorar o desempenho do aplicativo, é possível reduzir o número de viagens de ida e volta ao banco de dados fazendo o máximo de trabalho possível em cada transação. Neste cenário, você quer maximizar o número de mutações por transação, mantendo os limites do sistema ao mesmo tempo.
Para determinar quantas linhas você pode confirmar por transação, permanecendo abaixo do limite, primeiro confirme uma linha em uma transação. Com isso, você tem um valor de referência para a contagem de mutações por linha. Em seguida, divida o limite do sistema pelo valor de referência para receber um número de linhas por transação. Para mais informações sobre como as mutações são contadas, consulte esta observação.
Otimizar para viagens de ida e volta nem sempre é benéfico, especialmente se isso resultar em mais contenções de bloqueio. É possível solucionar conflitos de bloqueio em seu banco de dados usando estatísticas de bloqueio.
Monitorar suas transações para não atingir os limites do sistema
O uso do aplicativo aumenta, é possível que o número de mutações na transação também aumente. Para evitar que o limite do sistema seja atingido e a transação acabe falhando, é possível monitorar proativamente a estatística de confirmação da contagem de mutações ao longo do tempo. Se você observar esse valor aumentando para a mesma transação, talvez seja o momento de reotimizar a transação, conforme descrito na seção anterior.
Como acessar estatísticas de confirmação
Por padrão, as estatísticas de confirmação não são retornadas. Em vez disso, é necessário definir a sinalização return_commit_stats
como verdadeira em cada CommitRequest. Se a tentativa de confirmação exceder o número máximo permitido de mutações para uma transação, a confirmação falhará e um erro INVALID_ARGUMENT será retornado.
Confira um exemplo de como retornar estatísticas de confirmação usando as bibliotecas de cliente do Spanner.
Extrair estatísticas de confirmação
O exemplo a seguir mostra como receber estatísticas de confirmação usando as bibliotecas de cliente do Spanner.
C++
O código a seguir chama set_return_stats()
em CommitOptions
e retorna uma contagem de mutação de 6, porque estamos inserindo ou atualizando duas linhas e três colunas em cada linha.
C#
Em C#, as estatísticas de confirmação não são retornadas diretamente pela API. Em vez disso, eles são registrados no nível de registro Information pelo logger padrão.
O código a seguir ativa a geração de registros de estatísticas de confirmação para todas as transações
definindo a propriedade LogCommitStats
em SpannerConnectionStringBuilder
como
true. O código também implementa um agente de registro de amostra que mantém uma referência à resposta de confirmação vista pela última vez. O MutationCount
é recuperado dessa resposta e exibido.
Go
O código a seguir define a sinalização ReturnCommitStats
e imprime a contagem de mutações quando a transação é confirmada com êxito.
Java
Node.js
O código a seguir define a sinalização returnCommitStats
e retorna uma contagem de mutação
de 6, porque estamos inserindo ou atualizando duas linhas e três colunas em cada
linha.
PHP
Python
Em vez de retornar estatísticas de confirmação diretamente pela API, a biblioteca de cliente do Python as registra usando stdout
no nível Info
.
O código a seguir ativa a geração de registros de estatísticas de confirmação para todas as transações com a configuração de database.log_commit_stats = True
. O código também implementa um
logger de amostra que mantém uma referência à última resposta de confirmação vista. O
mutation_count
é recuperado a partir dessa resposta e exibido.
Ruby
O código a seguir define a sinalização return_commit_stats
e retorna uma contagem de mutação
de 6, porque estamos inserindo ou atualizando duas linhas e três colunas em cada
linha.