Sitzungen

Auf dieser Seite wird das erweiterte Konzept von Sitzungen in Spanner beschrieben, einschließlich Best Practices für Sitzungen beim Erstellen einer Clientbibliothek, mithilfe der REST- oder RPC APIs oder der Google-Clientbibliotheken.

Sitzungen – Übersicht

Eine Sitzung stellt einen Kommunikationskanal mit dem Spanner-Datenbankdienst dar. In einer Sitzung werden Transaktionen ausgeführt, die Daten in einer Spanner-Datenbank lesen, schreiben oder ändern. Jede Sitzung gilt für eine einzige Datenbank.

Sitzungen können jeweils eine oder mehrere Transaktionen ausführen. Wenn mehrere Transaktionen ausgeführt werden, wird die Sitzung als multiplexierte Sitzung bezeichnet.

Für eigenständige Lese-, Schreib- und Abfragevorgänge wird intern eine Transaktion verwendet.

Leistungsvorteile eines Sitzungspools

Das Erstellen einer Sitzung ist teuer. Um zu vermeiden, dass für jeden Datenbankvorgang Leistungskosten anfallen, sollten Kunden einen Sitzungspool führen. Dabei handelt es sich um einen Pool verfügbarer Sitzungen, die sofort verwendet werden können. Der Pool sollte vorhandene Sitzungen speichern und auf Anfrage den entsprechenden Sitzungstyp zurückgeben sowie die Bereinigung nicht verwendeter Sitzungen vornehmen. Ein Beispiel für die Implementierung eines Sitzungspools finden Sie im Quellcode für eine der Spanner-Clientbibliotheken, z. B. die Go-Clientbibliothek oder die Java-Clientbibliothek.

Sitzungen sind langlebig angelegt. Nachdem eine Sitzung für eine Datenbankoperation verwendet wurde, sollte der Client die Sitzung zur Wiederverwendung an den Pool zurückgeben.

gRPC-Kanäle – Übersicht

gRPC-Kanäle werden vom Spanner-Client für die Kommunikation verwendet. Ein gRPC-Kanal entspricht ungefähr einer TCP-Verbindung. Ein gRPC-Kanal kann bis zu 100 gleichzeitige Anfragen verarbeiten. Das bedeutet, dass eine Anwendung mindestens so viele gRPC-Kanäle benötigt wie die Anzahl der gleichzeitigen Anfragen, die die Anwendung ausführen wird, geteilt durch 100.

Der Spanner-Client erstellt beim Erstellen einen Pool von gRPC-Kanälen.

Best Practices für die Verwendung von Google-Clientbibliotheken

Im Folgenden werden Best Practices für die Verwendung der Google-Clientbibliotheken für Spanner beschrieben.

Anzahl der Sitzungen und gRPC-Kanäle in den Pools konfigurieren

Die Clientbibliotheken haben eine Standardanzahl von Sitzungen im Sitzungspool und eine Standardanzahl von gRPC-Kanälen im Kanalpool. Beide Standardwerte sind für die meisten Fälle ausreichend. Im Folgenden finden Sie die Standardmindest- und -maximalanzahl von Sitzungen sowie die Standardanzahl von gRPC-Kanälen für jede Programmiersprache.

C++

MinSessions: 100
MaxSessions: 400
NumChannels: 4

C#

MinSessions: 100
MaxSessions: 400
NumChannels: 4

Go

MinSessions: 100
MaxSessions: 400
NumChannels: 4

Java

MinSessions: 100
MaxSessions: 400
NumChannels: 4

Node.js

Der Node.js-Client unterstützt keine mehreren gRPC-Kanäle. Es wird daher empfohlen, mehrere Clients zu erstellen, anstatt die Größe des Sitzungspools für einen einzelnen Client auf mehr als 100 Sitzungen zu erhöhen.

MinSessions: 25
MaxSessions: 100

PHP

Der PHP-Client unterstützt keine konfigurierbare Anzahl von gRPC-Kanälen.

MinSessions: 1
MaxSessions: 500

Python

Python unterstützt vier verschiedene Sitzungspooltypen, die Sie zum Verwalten von Sitzungen verwenden können.

Ruby

Der Ruby-Client unterstützt keine mehreren gRPC-Kanäle. Daher empfehlen wir, mehrere Clients zu erstellen, anstatt die Größe des Sitzungspools für einen einzelnen Client auf mehr als 100 Sitzungen zu erhöhen.

MinSessions: 10
MaxSessions: 100

Die Anzahl der Sitzungen, die Ihre Anwendung verwendet, entspricht der Anzahl der gleichzeitigen Transaktionen, die Ihre Anwendung ausführt. Sie sollten die Standardeinstellungen für den Sitzungspool nur ändern, wenn Sie davon ausgehen, dass eine einzelne Anwendungsinstanz mehr gleichzeitige Transaktionen ausführen wird, als der Standard-Sitzungspool verarbeiten kann.

Für Anwendungen mit hoher Parallelität wird Folgendes empfohlen:

  1. Legen Sie MinSessions auf die voraussichtliche Anzahl gleichzeitiger Transaktionen fest, die ein einzelner Client ausführen wird.
  2. Legen Sie MaxSessions auf die maximale Anzahl gleichzeitiger Transaktionen fest, die ein einzelner Client ausführen kann.
  3. Legen Sie MinSessions=MaxSessions fest, wenn sich die erwartete Parallelität während der Lebensdauer der Anwendung nicht wesentlich ändert. Dadurch wird verhindert, dass der Sitzungspool skaliert wird. Das Hoch- oder Herunterskalieren des Sitzungspools beansprucht ebenfalls Ressourcen.
  4. Setzen Sie NumChannels auf MaxSessions / 100. Ein gRPC-Kanal kann bis zu 100 Anfragen gleichzeitig verarbeiten. Erhöhen Sie diesen Wert, wenn Sie eine hohe Latenz im Schwanzbereich (p95/p99-Latenz) feststellen, da dies ein Hinweis auf eine Überlastung des gRPC-Kanals sein kann.

Wenn Sie die Anzahl der aktiven Sitzungen erhöhen, werden zusätzliche Ressourcen im Spanner-Datenbankdienst und in der Clientbibliothek verwendet. Wenn Sie die Anzahl der Sitzungen über die tatsächlichen Anforderungen der Anwendung hinaus erhöhen, kann dies die Leistung Ihres Systems beeinträchtigen.

Sitzungspool statt Anzahl der Clients erhöhen

Die Größe des Sitzungspools für eine Anwendung bestimmt, wie viele gleichzeitige Transaktionen eine einzelne Anwendungsinstanz ausführen kann. Es wird nicht empfohlen, die Größe des Sitzungspools über die maximale Anzahl von gleichzeitigen Vorgängen hinaus zu erhöhen, die eine einzelne Anwendungsinstanz verarbeiten kann. Wenn die Anwendung eine große Anzahl von Anfragen erhält, die die Anzahl der Sitzungen im Pool übersteigt, werden die Anfragen in die Warteschlange gestellt, bis eine Sitzung verfügbar ist.

Die von der Clientbibliothek verwendeten Ressourcen sind:

  1. Jeder gRPC-Kanal verwendet eine TCP-Verbindung.
  2. Für jeden gRPC-Aufruf ist ein Thread erforderlich. Die maximale Anzahl der Threads, die von der Clientbibliothek verwendet wird, entspricht der maximalen Anzahl gleichzeitiger Abfragen, die die Anwendung ausführt. Diese Threads werden zusätzlich zu allen Threads ausgeführt, die die Anwendung für ihre eigene Geschäftslogik verwendet.

Es wird nicht empfohlen, die Größe des Sitzungspools über die maximale Anzahl von Threads hinaus zu erhöhen, die eine einzelne Anwendungsinstanz verarbeiten kann. Erhöhen Sie stattdessen die Anzahl der Anwendungsinstanzen.

Anteil der Schreibsitzungen verwalten

Bei einigen Clientbibliotheken reserviert Spanner einen Teil der Sitzungen für Lese-Schreib-Transaktionen. Dies wird als Anteil der Schreibsitzungen bezeichnet. Wenn Ihre Anwendung alle Lesesitzungen genutzt hat, verwendet Spanner die nicht schreibgeschützten Sitzungen auch für schreibgeschützte Transaktionen. Für Lese-/Schreibvorgänge ist spanner.databases.beginOrRollbackReadWriteTransaction erforderlich. Wenn der Nutzer die IAM-Rolle spanner.databaseReader hat, schlägt der Aufruf fehl und Spanner gibt die folgende Fehlermeldung zurück:

generic::permission_denied: Resource %resource% is missing IAM permission:
spanner.databases.beginOrRollbackReadWriteTransaction

Bei Clientbibliotheken, die einen Anteil an Schreibsitzungen haben, können Sie diesen festlegen.

C++

Alle C ++-Sitzungen sind identisch. Es gibt weder schreibgeschützte noch nicht schreibgeschützte Sitzungen.

C#

Der Standardanteil der Schreibsitzungen bei C# ist 0,2. Sie können ihn im Feld „WriteSessionsFraction“ von SessionPoolOptions ändern.

Go

Alle Go-Sitzungen sind gleich. Es gibt weder schreibgeschützte noch nicht schreibgeschützte Sitzungen.

Java

Alle Java-Sitzungen sind gleich. Es gibt weder schreibgeschützte noch nicht schreibgeschützte Sitzungen.

Node.js

Alle Node.js-Sitzungen sind gleich. Es gibt weder schreibgeschützte noch nicht schreibgeschützte Sitzungen.

PHP

Alle PHP-Sitzungen sind gleich. Es gibt keine schreibgeschützten bzw. nicht schreibgeschützten Sitzungen.

Python

Python unterstützt vier verschiedene Sitzungspooltypen, die Sie zum Verwalten von schreibgeschützten und nicht schreibgeschützten Sitzungen verwenden können.

Ruby

Der Standardanteil der Schreibsitzungen bei Ruby ist 0,3. Sie können ihn mit der client initialize-Methode ändern.

Best Practices beim Erstellen einer Clientbibliothek oder bei Verwendung von REST/RPC

Im Folgenden werden Best Practices für die Implementierung von Sitzungen in einer Clientbibliothek für Spanner und für die Verwendung von Sitzungen mit der REST API oder der RPC API beschrieben.

Diese Best Practices gelten nur, wenn Sie eine Clientbibliothek entwickeln oder wenn Sie REST/RPC-APIs verwenden. Wenn Sie eine der Google-Clientbibliotheken für Spanner verwenden, lesen Sie den Abschnitt Best Practices für die Verwendung von Google-Clientbibliotheken.

Sitzungspool erstellen und Größe festlegen

Um eine optimale Größe des Sitzungspools für einen Clientprozess festzulegen, geben Sie als untere Grenze die Anzahl der erwarteten gleichzeitigen Transaktionen an und als obere Grenze eine anfängliche Testanzahl (z. B. 100). Wenn die obere Grenze nicht ausreicht, setzen Sie sie herauf. Wenn Sie die Anzahl der aktiven Sitzungen erhöhen, werden zusätzliche Ressourcen im Spanner-Datenbankdienst verwendet. Wenn Sie also nicht verwendete Sitzungen bereinigen, kann dies die Leistung beeinträchtigen. Für Nutzer, die mit der RPC API arbeiten, empfehlen wir, nicht mehr als 100 Sitzungen pro gRPC-Kanal zu haben.

Gelöschte Sitzungen

Es gibt drei Möglichkeiten, eine Sitzung zu löschen:

  • Ein Client kann eine Sitzung löschen.
  • Der Spanner-Datenbankdienst kann eine Sitzung löschen, wenn die Sitzung länger als eine Stunde inaktiv ist.
  • Der Spanner-Datenbankdienst kann eine Sitzung löschen, wenn die Sitzung mehr als 28 Tage alt ist.

Der Versuch, eine gelöschte Sitzung zu verwenden, führt zum Fehler NOT_FOUND. Wenn Sie auf diesen Fehler stoßen, erstellen Sie eine neue Sitzung und verwenden Sie diese. Fügen Sie die neue Sitzung dem Pool hinzu und entfernen Sie die gelöschte Sitzung aus dem Pool.

Inaktive Sitzung offen halten

Der Spanner-Datenbankdienst behält sich das Recht vor, eine nicht verwendete Sitzung zu löschen. Wenn Sie eine inaktive Sitzung unbedingt offen halten müssen, wenn z. B. eine signifikante Erhöhung der Datenbanknutzung in naher Zukunft erwartet wird, können Sie verhindern, dass die Sitzung gelöscht wird. Führen Sie einen kostengünstigen Vorgang wie das Ausführen der SQL-Abfrage SELECT 1 durch, um die Sitzung aktiv zu halten. Wenn Sie eine inaktive Sitzung haben, die nicht in naher Zukunft verwendet werden soll, erlauben Sie, dass sie von Spanner gelöscht wird. Erstellen Sie eine neue Sitzung, wenn das nächste Mal eine Sitzung benötigt wird.

Ein Szenario, in dem Sitzungen offen gehalten werden, ist der Umgang mit regulärer Spitzennachfrage der Datenbank. Wenn eine starke Datenbanknutzung täglich von 9:00 Uhr bis 18:00 Uhr stattfindet, sollten Sie während dieser Zeit einige inaktive Sitzungen offen halten, da diese wahrscheinlich zu Spitzenzeiten erforderlich sind. Nach 18:00 Uhr kann Spanner inaktive Sitzungen wieder löschen. Erstellen Sie jeden Tag vor 9:00 Uhr einige neue Sitzungen, damit sie für die erwartete Nachfrage bereitstehen.

Ein anderes Szenario wäre, dass Sie eine Anwendung haben, die Spanner verwendet, aber den Verbindungsaufwand dabei vermeiden muss. Sie können eine Gruppe von Sitzungen offen halten, um den Verbindungsaufwand zu vermeiden.

Sitzungsdetails vom Clientbibliotheksbenutzer ausblenden

Wenn Sie eine Clientbibliothek erstellen, sollten Sie dem Clientbibliotheksbenutzer keine Sitzungen anzeigen. Stellen Sie die Möglichkeit für den Client bereit, Datenbankaufrufe ohne den Aufwand der Erstellung und Verwaltung von Sitzungen durchzuführen. Ein Beispiel für eine Clientbibliothek, in der die Sitzungsdetails vor dem Clientbibliothekbenutzer ausgeblendet werden, finden Sie in der Spanner-Clientbibliothek für Java.

Fehler bei Schreibtransaktionen bearbeiten, die nicht idempotent sind

Schreibtransaktionen ohne Wiederholungsschutz können Mutationen mehr als einmal anwenden. Wenn eine Mutation nicht idempotent ist, kann eine Mutation, die mehrmals angewendet wird, zu einem Fehler führen. Beispiel: Eine Einfügung (Insert) kann den Fehler ALREADY_EXISTS verursachen, obwohl die Zeile vor dem Schreibversuch nicht vorhanden war. Dies kann passieren, wenn der Back-End-Server die Mutation festgeschrieben hat, den Erfolg jedoch nicht dem Client mitteilen konnte. In diesem Fall könnte die Mutation wiederholt werden, was aber zu dem Fehler ALREADY_EXISTS führen würde.

Im Folgenden sind einige Möglichkeiten aufgelistet, wie Sie mit diesem Szenario bei der Bereitstellung Ihrer eigenen Clientbibliothek oder bei der Verwendung der REST API verfahren können:

  • Strukturieren Sie Ihre Schreibvorgänge so, dass sie idempotent sind.
  • Verwenden Sie Schreibvorgänge mit Wiederholungsschutz.
  • Implementieren Sie eine Methode mit der Logik "upsert", d. h. einfügen, wenn neu, oder aktualisieren, wenn bereits vorhanden.
  • Bearbeiten Sie den Fehler für den Client.

Für stabile Verbindungen sorgen

Für eine optimale Leistung sollte die Verbindung, die Sie zum Hosten einer Sitzung verwenden, stabil sein. Wenn sich die Hostingverbindung für eine Sitzung ändert, bricht Spanner möglicherweise die aktive Transaktion in der Sitzung ab. Dies führt während der Aktualisierung der Sitzungsmetadaten zu einer geringfügigen Mehrbelastung Ihrer Datenbank. Wenn sich einige Verbindungen gelegentlich ändern, ist das kein Problem, aber Sie sollten Situationen vermeiden, in denen sich eine große Anzahl von Verbindungen gleichzeitig ändert. Falls Sie einen Proxy zwischen dem Client und Spanner einsetzen, sollten Sie bei jeder Sitzung für eine stabile Verbindung sorgen.

Aktive Sitzungen überwachen

Mit dem Befehl ListSessions können Sie aktive Sitzungen in Ihrer Datenbank über die Befehlszeile, mit der REST API oder mit der RPC API überwachen. ListSessions zeigt die aktiven Sitzungen für eine bestimmte Datenbank an. Dies ist sinnvoll, wenn Sie die Ursache für ein Sitzungsleck finden möchten. Ein Sitzungsleck ist ein Vorfall, bei dem Sitzungen erstellt, aber nicht zur Wiederverwendung an einen Sitzungspool zurückgegeben werden.

Mit ListSessions können Sie Metadaten zu Ihren aktiven Sitzungen abrufen, z. B. wann eine Sitzung erstellt wurde und wann eine Sitzung zuletzt verwendet wurde. Die Analyse dieser Daten wird Ihnen bei der Fehlersuche die richtige Richtung weisen. Wenn für die meisten aktiven Sitzungen kein aktueller Wert für approximate_last_use_time vorhanden ist, deutet dies eventuell darauf hin, dass Sitzungen von Ihrer Anwendung nicht ordnungsgemäß wiederverwendet werden. Weitere Informationen zum Feld approximate_last_use_time finden Sie in der RPC API-Referenz.

Weitere Informationen zur Verwendung von ListSessions finden Sie in der REST API-Referenz, der RPC API-Referenz oder der Referenz zum gcloud-Befehlszeilentool.

Automatische Bereinigung von Sitzungslecks

Wenn Sie alle Sitzungen in Ihrem Sitzungspool verwenden, wird bei jeder neuen Transaktion gewartet, bis eine Sitzung an den Pool zurückgegeben wird. Wenn Sitzungen erstellt, aber nicht zur Wiederverwendung an den Sitzungspool zurückgegeben werden, wird dies als Sitzungsleck bezeichnet. Bei einem Sitzungsleck bleiben Transaktionen, die auf eine offene Sitzung warten, auf unbestimmte Zeit hängen und blockieren die Anwendung. Sitzungslecks werden oft durch problematische Transaktionen verursacht, die extrem lange ausgeführt werden und nicht verbindlich sind.

Sie können Ihren Sitzungspool so einrichten, dass diese inaktiven Transaktionen automatisch aufgelöst werden. Wenn Sie in Ihrer Clientbibliothek die automatische Behebung inaktiver Übergänge aktivieren, werden problematische Transaktionen, die zu einem Sitzungsleck führen können, erkannt, aus dem Sitzungspool entfernt und durch eine neue Sitzung ersetzt.

Protokolle können auch dabei helfen, diese problematischen Transaktionen zu identifizieren. Wenn die Protokollierung aktiviert ist, werden Warnprotokolle standardmäßig freigegeben, wenn mehr als 95% des Sitzungspools belegt sind. Wenn die Sitzungsnutzung mehr als 95 % beträgt, müssen Sie entweder die maximale Anzahl der Sitzungen in Ihrem Sitzungspool erhöhen oder es liegt möglicherweise ein Sitzungsleck vor. Warnprotokolle enthalten Stack-Traces von Transaktionen, die länger als erwartet ausgeführt werden. Sie können helfen, die Ursache für eine hohe Auslastung des Sitzungspools zu ermitteln. Warnungsprotokolle werden je nach Konfiguration des Log-Exporteurs gesendet.

Clientbibliothek aktivieren, um inaktive Transaktionen automatisch aufzulösen

Sie können die Clientbibliothek entweder so konfigurieren, dass sie Warnprotokolle sendet und inaktive Transaktionen automatisch auflöst, oder so, dass sie nur Warnprotokolle empfängt.

Java

Verwenden Sie setWarnAndCloseIfInactiveTransactions, um Warnprotokolle zu erhalten und inaktive Transaktionen zu entfernen.

 final SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder().setWarnAndCloseIfInactiveTransactions().build()

 final Spanner spanner =
         SpannerOptions.newBuilder()
             .setSessionPoolOption(sessionPoolOptions)
             .build()
             .getService();
 final DatabaseClient client = spanner.getDatabaseClient(databaseId);

Wenn Sie nur Warnlogs erhalten möchten, verwenden Sie setWarnIfInactiveTransactions.

 final SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder().setWarnIfInactiveTransactions().build()

 final Spanner spanner =
         SpannerOptions.newBuilder()
             .setSessionPoolOption(sessionPoolOptions)
             .build()
             .getService();
 final DatabaseClient client = spanner.getDatabaseClient(databaseId);

Go

Wenn Sie Warnprotokolle erhalten und inaktive Transaktionen entfernen möchten, verwenden Sie SessionPoolConfig mit InactiveTransactionRemovalOptions.

 client, err := spanner.NewClientWithConfig(
     ctx, database, spanner.ClientConfig{SessionPoolConfig: spanner.SessionPoolConfig{
         InactiveTransactionRemovalOptions: spanner.InactiveTransactionRemovalOptions{
         ActionOnInactiveTransaction: spanner.WarnAndClose,
         }
     }},
 )
 if err != nil {
     return err
 }
 defer client.Close()

Wenn Sie nur Warnlogs erhalten möchten, verwenden Sie customLogger.

 customLogger := log.New(os.Stdout, "spanner-client: ", log.Lshortfile)
 // Create a logger instance using the golang log package
 cfg := spanner.ClientConfig{
         Logger: customLogger,
     }
 client, err := spanner.NewClientWithConfig(ctx, db, cfg)

Multiplex-Sitzungen

Mit Multiplex-Sitzungen können Sie eine unbegrenzte Anzahl gleichzeitiger Anfragen erstellen. Multiplex-Sitzungen bieten folgende Vorteile:

  • Geringere Anforderungen an die Backend-Ressourcen. So werden beispielsweise Sitzungswartungsaktivitäten vermieden, die mit der Wartung der Sitzungsinhaberschaft und der Garbage Collection verbunden sind.
  • Langlebige Sitzung, die im inaktiven Zustand keine Keep-Alive-Anfragen erfordert.
  • Übliche Clientbibliotheken können eine multiplexierte Sitzung für jeden Client verwenden. Bei Clients, die für einige Vorgänge Multiplex-Sitzungen verwenden, ist die Anzahl der verwendeten regulären Sitzungen geringer als bei Clients, die nur reguläre Sitzungen verwenden.
  • Es ist nicht erforderlich, nur eine Affinität zu einem gRPC-Kanal zu haben. Clients können Anfragen für dieselbe Multiplex-Sitzung über mehrere Kanäle senden.

Multiplex-Sitzungen unterstützen Folgendes:

  • Die Clientbibliotheken für Java und Go.
  • Spanner-Umgebungstools, die von den Java- und Go-Clientbibliotheken abhängen, z. B. PGAdapter, JDBC, Hibernate, Datenbank-/SQL-Treiber und GORM.
  • Spanner APIs für schreibgeschützte Transaktionen

Mit OpenTelemetry-Messwerten können Sie sehen, wie der Traffic zwischen dem vorhandenen Sitzungspool und der gemultiplexten Sitzung aufgeteilt wird. OpenTelemetry hat einen Messwertfilter, is_multiplexed, der multiplexierte Sitzungen anzeigt, wenn er auf true gesetzt ist.

Multiplex-Sitzungen sind für JDBC- und PG-Adapter standardmäßig aktiviert. Bei Java- und Go-Clientbibliotheken ist sie standardmäßig deaktiviert. Sie verwenden die Java-Clientbibliothek oder die Go-Clientbibliothek, um mehrere Sitzungen zu ermöglichen. Informationen zum Aktivieren einer multiplexten Sitzung mit Java oder Go finden Sie unter Multiplex-Sitzungen aktivieren.

Multiplex-Sitzungen aktivieren

Wenn Sie mit dem Java- oder Go-Client mehrere Sitzungen gleichzeitig nutzen möchten, setzen Sie GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS auf true.

export GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS=TRUE

Zugriffe für reguläre und multiplexte Sitzungen ansehen

OpenTelemetry bietet den Filter is_multiplexed, mit dem der Traffic für mehrere Sitzungen angezeigt wird. Wenn Sie diesen Filter auf true to view multiplexed sessions andfalse` festlegen, werden nur reguläre Sitzungen angezeigt.

  1. Richten Sie OpenTelemetry für Spanner mithilfe der Verfahren im Abschnitt Vorbereitung von Spanner OpenTelemetry ein.
  2. Rufen Sie den Metrics Explorer auf.

    Zum Metrics Explorer

  3. Filtern Sie im Drop-down-Menü Messwert nach generic.

  4. Klicken Sie auf Generic Task (Gängige Aufgabe) und gehen Sie zu Spanner > Spanner/num_acquired_sessions.

  5. Wählen Sie im Feld Filter eine der folgenden Optionen aus:

    a. is_multiplexed = false, um reguläre Sitzungen aufzurufen. b. is_multiplexed = true, um sich multiplexierte Sitzungen anzusehen.

    Das folgende Bild zeigt die Option Filter mit ausgewählten multiplexierten Sitzungen.

Weitere Informationen zur Verwendung von OpenTelemetry mit Spanner finden Sie unter OpenTelemetry zur Demokratisierung der Spanner-Observability nutzen und Latenz in einer Spanner-Komponente mit OpenTelemetry untersuchen.

OpenTelemetry-Dashboard mit dem Filter „is-multiplexed“