Per aiutarti a comprendere, ottimizzare e diagnosticare meglio i problemi delle transazioni, Spanner ti consente di accedere alle statistiche sul commit delle transazioni. Attualmente, puoi recuperare il numero totale di mutazioni per una transazione.
Quando utilizzare le statistiche sul commit
Conoscere il numero di mutazioni per una transazione può essere utile nei seguenti scenari.
Ottimizza per viaggi di andata e ritorno
Per migliorare le prestazioni della tua applicazione, puoi ridurre il numero di round trip al database svolgendo il maggior numero di operazioni possibile in ogni transazione. In questo scenario, vuoi massimizzare il numero di mutazioni per transazione, rimanendo allo stesso tempo entro i limiti del sistema.
Per determinare quante righe puoi eseguire il commit per transazione senza superare il limite, esegui prima il commit di una riga di una transazione. In questo modo ottieni una base del numero di mutazioni per riga. Poi dividi il limite di sistema per la base di riferimento per ottenere un numero di righe per transazione. Per ulteriori informazioni su come vengono conteggiate le mutazioni, consulta questa nota.
Tieni presente che l'ottimizzazione per i viaggi di andata e ritorno non è sempre vantaggiosa, in particolare se comporta un maggior numero di contese dei blocchi. Puoi risolvere i problemi dei conflitti di blocco nel database utilizzando le statistiche sui blocchi.
Monitora le transazioni per evitare di raggiungere i limiti di sistema
Con l'aumento dell'utilizzo delle applicazioni, è possibile che aumenti anche il numero di modifiche nella transazione. Per evitare di raggiungere il limite di sistema e che la transazione alla fine non vada a buon fine, puoi monitorare in modo proattivo le statistiche di commit del conteggio delle mutazioni nel tempo. Se noti che questo valore aumenta per la stessa transazione, potrebbe essere il momento di ottimizzare di nuovo la transazione come descritto nella sezione precedente.
Come accedere alle statistiche sul commit
Le statistiche sul commit non vengono restituite per impostazione predefinita. Devi invece impostare il flag return_commit_stats
su true in ogni CommitRequest. Se
il tentativo di commit supera il numero massimo consentito di mutazioni per una
transazione, il commit non riesce e viene restituito un
errore INVALID_ARGUMENT.
Ecco un esempio di come restituire statistiche sul commit utilizzando le librerie client di Spanner.
Recupero statistiche sul commit
L'esempio seguente mostra come ricevere statistiche sul commit utilizzando le librerie client di Spanner.
C++
Il seguente codice chiama set_return_stats()
su CommitOptions
e
restituisce un conteggio delle mutazioni pari a 6, perché stiamo inserendo o aggiornando 2 righe e
3 colonne in ogni riga.
C#
In C#, le statistiche sul commit non vengono restituite direttamente tramite l'API. Vengono invece registrate a livello di log Informazioni dal logger predefinito.
Il seguente codice consente la registrazione delle statistiche sul commit per tutte le transazioni impostando la proprietà LogCommitStats
su SpannerConnectionStringBuilder
su
true. Il codice implementa anche un logger di esempio che mantiene un riferimento all'ultima risposta di commit rilevata. MutationCount
viene quindi recuperato da questa risposta e visualizzato.
Go
Il codice seguente imposta il flag ReturnCommitStats
e stampa il conteggio delle mutazioni una volta eseguito il commit della transazione.
Java
Node.js
Il seguente codice imposta il flag returnCommitStats
e restituisce un numero di mutazioni pari a 6, perché stiamo inserendo o aggiornando 2 righe e 3 colonne in ogni riga.
PHP
Python
Anziché restituire le statistiche di commit direttamente tramite l'API, la libreria client Python le registra utilizzando stdout
al livello Info
.
Il seguente codice consente il logging delle statistiche di commit per tutte le transazioni impostando database.log_commit_stats = True
. Il codice implementa anche un
logger di esempio che mantiene un riferimento all'ultima risposta del commit rilevata. mutation_count
viene quindi recuperato da questa risposta e visualizzato.
Ruby
Il seguente codice imposta il flag return_commit_stats
e restituisce un numero di mutazioni pari a 6, perché stiamo inserendo o aggiornando 2 righe e 3 colonne in ogni riga.