Per aiutarti a comprendere, ottimizzare e diagnosticare meglio i problemi relativi alle transazioni, Spanner ti consente di accedere alle statistiche sui commit delle transazioni. Al momento, può recuperare il numero totale di mutazioni per una transazione.
Quando utilizzare le statistiche di commit
Conoscere il conteggio delle mutazioni per una transazione può essere utile nei seguenti scenari.
Ottimizza per i viaggi di andata e ritorno
Per contribuire a migliorare le prestazioni dell'applicazione, puoi ridurre il numero di viaggi di andata e ritorno al database eseguendo il maggior numero possibile di operazioni in ogni transazione. In questo scenario, vuoi massimizzare il numero di mutazioni per transazioni, rimanendo al contempo entro i limiti di sistema.
Per determinare quante righe puoi eseguire il commit per transazione senza superare il limite, esegui prima il commit di una riga in una transazione. In questo modo, ottieni un valore di riferimento per il numero di mutazioni per riga. Quindi dividi il limite di sistema per il valore 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 utile, in particolare se comporta un aumento delle contese per i blocchi. Puoi risolvere i 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 aumenta anche il numero di mutazioni nella transazione. Per evitare di raggiungere il limite del sistema e di far fallire la transazione, puoi monitorare in modo proattivo la statistica dei commit del conteggio delle mutazioni nel tempo. Se osservi un aumento di questo valore per la stessa transazione, potrebbe essere il momento di ottimizzare nuovamente la transazione come descritto nella sezione precedente.
Come accedere alle statistiche sui commit
Le statistiche sui commit non vengono restituite per impostazione predefinita. Devi invece impostare
return_commit_stats
su true per ogni CommitRequest. Se
il tuo tentativo di commit supera il numero massimo consentito di mutazioni per un
transazione, il commit non riesce e viene restituito un errore INVALID_ARGUMENT
restituito.
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 pari a 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. ma vengono registrati al livello di log Informazioni dal logger predefinito.
Il codice seguente attiva il logging delle statistiche dei 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
ultima risposta al commit. L'elemento MutationCount
viene quindi recuperato da questo
la risposta e la visualizzazione.
Vai
Il codice seguente imposta il flag ReturnCommitStats
e stampa il conteggio delle mutazioni quando la transazione viene eseguita correttamente.
Java
Node.js
Il codice seguente imposta il flag returnCommitStats
e restituisce un conteggio delle mutazioni pari a 6, perché stiamo inserendo o aggiornando 2 righe e 3 colonne in ogni riga.
PHP
Python
Anziché restituire le statistiche sui commit direttamente tramite l'API, la libreria client Python le registra utilizzando stdout
a livello Info
.
Il codice seguente attiva il logging delle statistiche dei commit per tutte le transazioni impostando database.log_commit_stats = True
. Il codice implementa anche
un logger di esempio che conserva un riferimento all'ultima risposta al commit rilevata. La
mutation_count
viene quindi recuperato da questa risposta e visualizzato.
Ruby
Il codice seguente imposta il flag return_commit_stats
e restituisce un conteggio delle mutazioni pari a 6, perché stiamo inserendo o aggiornando 2 righe e 3 colonne in ogni riga.