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.
Ao usar DML, o limite de 80.000 (incluindo índices) é aplicado por instrução, não por transação. É possível executar várias instruções DML em uma única transação para confirmar mais de 80.000 mutações, sujeito ao limite de tamanho de transação de 100 MiB. Nesse caso, o mutation_count retornado nas estatísticas de confirmação reflete o total de mutações cumulativas (incluindo índices) em todas as instruções e pode exceder 80.000.
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.
Como 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
return_commit_stats sinalização como verdadeira em cada CommitRequest. Se você usar a API Mutation e a tentativa de confirmação exceder o número máximo permitido de mutações (incluindo índices), a confirmação falhará e um erro INVALID_ARGUMENT será retornado. Para DML, exceder o limite de mutação (incluindo índices) faz com que a instrução DML individual falhe durante a execução com um erro BadUsage, em vez de falhar no momento da confirmação.
Confira um exemplo de como retornar estatísticas de confirmação usando as bibliotecas de cliente do Spanner.
Recuperar 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 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.