Per aiutarti a comprendere, ottimizzare e diagnosticare meglio i problemi relativi alle transazioni, Spanner ti dà accesso alle statistiche sul commit delle transazioni. Attualmente, puoi recuperare il numero totale di mutazioni per una transazione.
Quando utilizzare le statistiche di commit
Conoscere il numero di mutazioni di una transazione può essere utile negli scenari seguenti.
Ottimizza per i viaggi di andata e ritorno
Per migliorare le prestazioni della tua applicazione, puoi ridurre il numero di viaggi di andata e ritorno verso il database eseguendo il maggior lavoro possibile in ogni transazione. In questo scenario, vuoi massimizzare il numero di mutazioni per transazione, rimanendo al contempo entro i limiti di sistema.
Per determinare il numero di righe di cui puoi eseguire il commit per transazione rimanendo al di sotto del limite, esegui prima il commit di una riga in una transazione. In questo modo ottieni una base di conteggio delle mutazioni per riga. Quindi dividi il limite di sistema per il tuo riferimento per ottenere un numero di righe per transazione. Per ulteriori informazioni su come vengono conteggiate le mutazioni, fai riferimento a questa nota.
Tieni presente che l'ottimizzazione per le corse di andata e ritorno non è sempre vantaggiosa, in particolare se comporta un aumento dei conflitti. Puoi risolvere i conflitti dei blocchi nel database utilizzando le statistiche sul blocco.
Monitora le transazioni per evitare di raggiungere i limiti di sistema
Con l'aumento dell'utilizzo delle applicazioni, è possibile che anche il numero di mutazioni nella transazione aumenti. Per evitare di raggiungere il limite di sistema e che la transazione non vada a buon fine, puoi monitorare proattivamente nel tempo le statistiche di commit del conteggio delle mutazioni. Se noti che questo valore aumenta per la stessa transazione, potrebbe essere il momento di ottimizzare nuovamente la transazione come descritto nella sezione precedente.
Come accedere alle statistiche sul commit
Le statistiche di commit non vengono restituite per impostazione predefinita. Devi invece impostare il flag return_commit_stats
su true per ogni CommitRequest. Se il tentativo di commit supera il numero massimo consentito di mutazioni per una transazione, il commit non va a buon fine e viene restituito un errore INVALID_ARGUMENT.
Ecco un esempio di come restituire statistiche di commit utilizzando le librerie client di Spanner.
Recupero delle statistiche di commit
L'esempio seguente mostra come ottenere statistiche di commit utilizzando le librerie client di Spanner.
C++
Il seguente codice chiama set_return_stats()
su CommitOptions
e
restituisce un conteggio delle mutazioni 6, perché stiamo inserendo o aggiornando 2 righe e
3 colonne in ogni riga.
C#
In C#, le statistiche di commit non vengono restituite direttamente tramite l'API. Vengono invece registrati a livello di log delle informazioni dal logger predefinito.
Il seguente codice consente il logging delle statistiche di commit per tutte le transazioni impostando la proprietà LogCommitStats
su SpannerConnectionStringBuilder
su true. Il codice implementa inoltre un logger di esempio che conserva un riferimento all'ultima risposta di commit rilevata. L'elemento MutationCount
viene quindi recuperato da questa
risposta e visualizzato.
Go
Il seguente codice imposta il flag ReturnCommitStats
e stampa il numero di mutazioni quando viene eseguito il commit della transazione.
Java
Node.js
Il seguente codice imposta il flag returnCommitStats
e restituisce un numero di modifiche 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 abilita 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 al commit rilevata. L'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 modifiche pari a 6, perché stiamo inserendo o aggiornando 2 righe e 3 colonne in ogni riga.