Per aiutarti a comprendere, ottimizzare e diagnosticare meglio i problemi relativi alle transazioni, Spanner ti dà accesso 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 baseline del conteggio delle mutazioni per riga. Quindi, dividi il limite di sistema per la baseline per ottenere un numero di righe per transazione. Per ulteriori informazioni su come vengono conteggiate le mutazioni, consulta questa nota.
Quando si utilizza DML, il limite di 80.000 (indici inclusi) si applica per istruzione, non per transazione. Puoi eseguire più istruzioni DML in una singola transazione per eseguire il commit di più di 80.000 mutazioni, nel rispetto del limite di dimensioni della transazione di 100 MiB. In questo caso, il valore mutation_count restituito nelle statistiche di commit riflette il totale delle mutazioni cumulative (indici inclusi) in tutte le istruzioni e può superare 80.000.
Tieni presente che l'ottimizzazione per i round trip non è sempre vantaggiosa, soprattutto se comporta un maggior numero di conflitti 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 utilizzi l'API Mutation e il tentativo di commit supera il numero massimo consentito di mutazioni (indici inclusi), il commit non va a buon fine e viene restituito un errore INVALID_ARGUMENT. Per DML, il superamento del limite di mutazioni (indici inclusi) fa sì che la singola istruzione DML non vada a buon fine durante l'esecuzione con un errore BadUsage, anziché non andare a buon fine al momento del commit.
Ecco un esempio di come restituire le statistiche di commit utilizzando le librerie client di Spanner.
Recuperare le statistiche di commit
Il seguente esempio 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.