Para ajudar a compreender, otimizar e diagnosticar melhor os problemas de transações, o Spanner dá-lhe acesso às estatísticas de confirmação de transações. Atualmente, pode obter o número total de mutações de uma transação.
Quando usar estatísticas de confirmação
Saber a quantidade de mutações de uma transação pode ser útil nos seguintes cenários.
Otimize para viagens de ida e volta
Para ajudar a melhorar o desempenho da sua aplicação, pode reduzir o número de viagens de ida e volta à base de dados fazendo o máximo de trabalho possível em cada transação. Neste cenário, quer maximizar o número de mutações por transação, ao mesmo tempo que se mantém dentro dos limites do sistema.
Para determinar quantas linhas pode confirmar por transação sem exceder o limite, confirme primeiro uma linha numa transação. Isto dá-lhe uma base de referência da quantidade de mutações por linha. Em seguida, divida o limite do sistema pela sua base para obter um número de linhas por transação. Para mais informações sobre como as mutações são contabilizadas, consulte esta nota.
Tenha em atenção que a otimização em função de viagens de ida e volta nem sempre é vantajosa, especialmente se resultar em mais contestações de bloqueio. Pode resolver conflitos de bloqueio na sua base de dados através de estatísticas de bloqueio.
Monitorize as suas transações para evitar atingir os limites do sistema
À medida que a utilização da aplicação aumenta, é possível que o número de mutações na sua transação também aumente. Para evitar atingir o limite do sistema e que a transação acabe por falhar, pode monitorizar proativamente a estatística de confirmação da contagem de mutações ao longo do tempo. Se observar que este valor aumenta para a mesma transação, pode ser altura de reotimizar a transação, conforme descrito na secção anterior.
Como aceder às estatísticas de commits
Por predefinição, as estatísticas de confirmação não são devolvidas. Em alternativa, tem de definir a flag return_commit_stats
como verdadeira em cada CommitRequest. Se a sua tentativa de confirmação exceder o número máximo permitido de mutações para uma transação, a confirmação falha e é devolvido um erro INVALID_ARGUMENT.
Segue-se um exemplo de como devolver estatísticas de commits através das bibliotecas cliente do Spanner.
Obtenha estatísticas de commits
O exemplo seguinte mostra como obter estatísticas de commits através das bibliotecas cliente do Spanner.
C++
O código seguinte chama set_return_stats()
em CommitOptions
e devolve uma contagem de mutações de 6, porque estamos a inserir ou atualizar 2 linhas e 3 colunas em cada linha.
C#
Em C#, as estatísticas de confirmação não são devolvidas diretamente através da API. Em vez disso, são registados no nível de registo Information pelo registador predefinido.
O código seguinte ativa o registo de estatísticas de confirmação para todas as transações definindo a propriedade LogCommitStats
em SpannerConnectionStringBuilder
como verdadeira. O código também implementa um registador de exemplo que mantém uma referência à resposta de confirmação vista pela última vez. Em seguida, o MutationCount
é obtido desta resposta e apresentado.
Go
O código seguinte define a flag ReturnCommitStats
e imprime a contagem de mutações quando a transação é confirmada com êxito.
Java
Node.js
O código seguinte define a flag returnCommitStats
e devolve uma contagem de mutações de 6, porque estamos a inserir ou atualizar 2 linhas e 3 colunas em cada linha.
PHP
Python
Em vez de devolver estatísticas de commits diretamente através da API, a biblioteca cliente Python regista-as através de stdout
ao nível Info
.
O código seguinte ativa o registo de estatísticas de confirmação para todas as transações definindo database.log_commit_stats = True
. O código também implementa um registador de exemplo que mantém uma referência à resposta de confirmação vista pela última vez. Em seguida, o
mutation_count
é obtido desta resposta e apresentado.
Ruby
O código seguinte define a flag return_commit_stats
e devolve uma contagem de mutações de 6, porque estamos a inserir ou atualizar 2 linhas e 3 colunas em cada linha.