Per aiutarti a comprendere, ottimizzare e diagnosticare meglio i problemi relativi alle transazioni, Spanner ti consente di accedere alle statistiche di commit delle transazioni. Al momento, puoi 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.
Ottimizzare per i round trip
Per migliorare il rendimento della tua applicazione, puoi ridurre il numero di round trip al database eseguendo il maggior numero possibile di operazioni in ogni transazione. In questo scenario, vuoi massimizzare il numero di mutazioni per transazione, rimanendo al contempo entro i limiti del sistema limits.
Per determinare il numero di righe di cui puoi eseguire il commit per transazione senza superare il limite, esegui prima il commit di una riga in una transazione. In questo modo, ottieni una base di riferimento per il conteggio delle mutazioni per riga. Quindi, dividi il limite di sistema per la base di riferimento per ottenere il numero di righe per transazione. Per ulteriori informazioni su come vengono conteggiate le mutazioni, consulta questa nota.
Tieni presente che l'ottimizzazione per i round trip non è sempre vantaggiosa, soprattutto se comporta un aumento delle contese di blocco. Puoi risolvere i conflitti di blocco nel database utilizzando le statistiche di blocco.
Monitorare le transazioni per evitare di raggiungere i limiti di sistema
Man mano che l'utilizzo dell'applicazione aumenta, è possibile che aumenti anche il numero di mutazioni 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 la statistica di commit del conteggio delle mutazioni nel tempo. Se noti che questo valore aumenta per la stessa transazione, potrebbe essere il momento di riottimizzare la transazione come descritto nella sezione precedente.
Come accedere alle statistiche di commit
Le statistiche di commit non vengono restituite per impostazione predefinita. Devi invece impostare il
return_commit_stats flag su true in 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 le statistiche di commit utilizzando le librerie client di Spanner.
Recuperare le statistiche di commit
L'esempio seguente mostra come ottenere le 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. Vengono invece registrate al livello di log Informazioni dal logger predefinito.
Il seguente codice attiva la registrazione delle statistiche di 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 visualizzata. Il valore MutationCount viene quindi recuperato da questa risposta e visualizzato.
Vai
Il seguente codice imposta il flag ReturnCommitStats e stampa il conteggio delle mutazioni quando il commit della transazione viene eseguito correttamente.
Java
Node.js
Il seguente codice 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 di commit direttamente tramite l'API, la libreria client Python le registra utilizzando stdout al livello Info.
Il seguente codice attiva la registrazione 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 di commit visualizzata. Il valore mutation_count viene quindi recuperato da questa risposta e visualizzato.
Ruby
Il seguente codice 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.