Damit Sie Transaktionsprobleme besser verstehen, optimieren und diagnostizieren können, bietet Spanner Zugriff auf Commit-Statistiken für Transaktionen. Derzeit können Sie die Gesamtzahl der Mutationen für eine Transaktion abrufen.
Wann Commit-Statistiken nützlich sind
Die Anzahl der Mutationen für eine Transaktion zu kennen, kann in den folgenden Szenarien hilfreich sein.
Für Umläufe optimieren
Zur Verbesserung der Leistung Ihrer Anwendung können Sie die Anzahl der Umläufe zur Datenbank reduzieren, indem Sie bei jeder Transaktion so viele Aufgaben wie möglich erledigen. In diesem Szenario möchten Sie die Anzahl der Mutationen pro Transaktion maximieren und gleichzeitig innerhalb der Systemgrenzen bleiben.
Um zu ermitteln, wie viele Zeilen Sie pro Transaktion committen können, ohne das Limit zu überschreiten, committen Sie zuerst eine Zeile in einer Transaktion. So erhalten Sie eine Baseline für die Anzahl der Mutationen pro Zeile. Teilen Sie dann das Systemlimit durch Ihre Baseline, um die Anzahl der Zeilen pro Transaktion zu erhalten. Weitere Informationen zum Zählen von Mutationen finden Sie in diesem Hinweis.
Bei Verwendung von DML gilt das Limit von 80.000 (einschließlich Indexe) pro Anweisung und nicht pro Transaktion. Sie können mehrere DML-Anweisungen in einer einzelnen Transaktion ausführen,um mehr als 80.000 Mutationen zu committen, sofern das Limit für die Transaktionsgröße von 100 MiB nicht überschritten wird. In diesem Fall spiegelt der zurückgegebene mutation_count in den Commit-Statistiken die kumulative Gesamtzahl der Mutationen (einschließlich Indexe) für alle Anweisungen wider und kann 80.000 überschreiten.
Beachten Sie, dass die Optimierung für Umläufe nicht immer vorteilhaft ist, insbesondere wenn dies zu mehr Sperrkonflikten führt. Sie können Sperrkonflikte in Ihrer Datenbank mithilfe von Sperrstatistiken lösen.
Transaktionen überwachen, um das Erreichen von Systemlimits zu vermeiden
Mit zunehmender Anwendungsnutzung kann auch die Anzahl der Mutationen in Ihrer Transaktion steigen. Um das Systemlimit nicht zu erreichen und zu vermeiden, dass Ihre Transaktion schließlich fehlschlägt, können Sie die Commit-Statistik für die Anzahl der Mutationen im Zeitverlauf proaktiv überwachen. Wenn Sie feststellen, dass dieser Wert für dieselbe Transaktion steigt, ist es möglicherweise an der Zeit, Ihre Transaktion wie im vorherigen Abschnitt beschrieben neu zu optimieren.
Commit-Statistiken aufrufen
Commit-Statistiken werden standardmäßig nicht zurückgegeben. Stattdessen müssen Sie das
return_commit_stats Flag bei jeder CommitRequest auf "true" setzen. Wenn Sie die Mutation API verwenden und Ihr Commit-Versuch die maximal zulässige Anzahl von Mutationen (einschließlich Indexe) überschreitet, schlägt der Commit fehl und der Fehler INVALID_ARGUMENT wird zurückgegeben. Bei DML führt das Überschreiten des Mutationslimits (einschließlich Indexe) dazu, dass die einzelne DML-Anweisung während der Ausführung mit einem BadUsage-Fehler fehlschlägt, anstatt zum Zeitpunkt des Commits.
Hier ist ein Beispiel für die Rückgabe von Commit-Statistiken mithilfe der Spanner-Clientbibliotheken.
Commit-Statistiken abrufen
Das folgende Beispiel zeigt, wie Commit-Statistiken mithilfe der Spanner-Clientbibliotheken abgerufen werden.
C++
Der folgende Code ruft set_return_stats() für CommitOptions auf und gibt eine Mutationszahl von 6 zurück, da wir in jeder Zeile zwei Zeilen und drei Spalten einfügen oder aktualisieren.
C#
In C# werden Commit-Statistiken nicht direkt über die API zurückgegeben. Sie werden stattdessen vom Standard-Logger auf die Logebene Informationen protokolliert.
Mit dem folgenden Code wird das Commit-Statistik-Logging für alle Transaktionen aktiviert. Setzen Sie dazu das Attribut LogCommitStats in SpannerConnectionStringBuilder auf "true". Der Code implementiert auch einen Beispiel-Logger, der einen Verweis auf die zuletzt erfasste Commit-Antwort speichert. Der MutationCount wird dann aus dieser Antwort abgerufen und angezeigt.
Go
Mit dem folgenden Code wird das Flag ReturnCommitStats festgelegt und die Mutationsanzahl ausgegeben, wenn die Transaktion erfolgreich übergeben wurde.
Java
Node.js
Der folgende Code legt das Flag returnCommitStats fest und gibt eine Mutationszahl von 6 zurück, da wir in jeder Zeile zwei Zeilen und drei Spalten einfügen oder aktualisieren.
PHP
Python
Anstatt Commit-Statistiken direkt über die API zurückzugeben, protokolliert die Python-Clientbibliothek sie mit stdout auf der Ebene Info.
Der folgende Code aktiviert das Commit-Statistik-Logging für alle Transaktionen durch Festlegen von database.log_commit_stats = True. Der Code implementiert auch einen Beispiel-Logger, der einen Verweis auf die zuletzt erfasste Commit-Antwort speichert. Der mutation_count wird dann aus dieser Antwort abgerufen und angezeigt.
Ruby
Der folgende Code legt das Flag return_commit_stats fest und gibt eine Mutationszahl von 6 zurück, da wir in jeder Zeile zwei Zeilen und drei Spalten einfügen oder aktualisieren.