Zugriffsmuster analysieren

Sie können visuell analysieren, wie Ihre Anwendungen Daten in Bigtable lesen und schreiben. Verwenden Sie dazu die Seite Zugriffsmuster in Google Cloud console. Alternativ können Sie die Cloud Monitoring API programmatisch aufrufen, um die zugrunde liegenden Zugriffsmustermesswerte abzufragen.

Bevor Sie dieses Dokument lesen, sollten Sie sich mit den Themen Lesevorgänge, Schreibvorgänge und Monitoring vertraut machen.

Übersicht

Bigtable klassifiziert eingehende Datenanfragen in Cloud Monitoring automatisch in Abfragetypen. Das Zugriffsmuster Ihrer Arbeitslast ist die Mischung aus verschiedenen Abfragetypen. Das Zugriffsmuster Ihrer Arbeitslast kann beispielsweise aus den Abfragetypen „Punktlesen“, „Kurzer Scan“ und „Punktschreiben“ bestehen. Bigtable definiert 10 verschiedene Abfragetypen.

Auf der Seite Systemstatistiken wird die gesamte Ressourcenauslastung angezeigt und Key Visualizer zeigt, wie Bigtable den Traffic auf Zeilenschlüsselbereiche verteilt. Auf der Seite Zugriffsmuster finden Sie eine abfrageorientierte Aufschlüsselung Ihrer Arbeitslast auf Cluster-, Tabellen- und Anwendungsprofilebene. Sie können die Seite Zugriffsmuster für die folgenden Aufgaben verwenden:

  • Arbeitslast verstehen: Sie können den Anteil und die Rate der Lese-, Schreib- und Lese-/Schreibabfragetypen für jeden Cluster aufrufen und die Messwerte nach Tabelle oder Anwendungsprofil gruppieren.
  • Ineffiziente Abfragemuster erkennen und Latenzprobleme beheben:
    • Identifizieren Sie dünnbesetzte Lesevorgänge, bei denen Bigtable aufgrund selektiver Filter oder nicht erfasster Zellen, die auf die automatische Speicherbereinigung warten, deutlich mehr Zeilen oder Zellen scannt als zurückgibt.
    • Rückwärtsscans überwachen, die weniger effizient als Vorwärtsscans sind
    • Vergleichen Sie die serverseitigen Latenzperzentile mit den gescannten Zeilen, den zurückgegebenen Zeilen und den gesehenen Zellen, um herauszufinden, welche Zugriffsmuster zu Latenzspitzen beitragen.
  • Arbeitslasten für die Feature-Übernahme identifizieren:
    • Tabellen oder Anwendungsprofile mit einer hohen Anzahl von Punktlesevorgängen identifizieren, die von der In-Memory-Stufe in der Enterprise Plus-Version profitieren können
    • Identifizieren Sie große Scan- oder Batch-Lesearbeitslasten, die Sie mithilfe des serverlosen Computings von Data Boost vom Bereitstellungstraffic isolieren können.

Beschränkungen

Bigtable klassifiziert GoogleSQL for Bigtable-Abfragen nicht als Zugriffsmuster und schließt diese Abfragen nicht in die Zugriffsmuster-Messwerte für Zeilen, Zellen oder Byte ein. In den Diagrammen Verteilung der Abfragen pro Sekunde, Abfragen pro Sekunde und Latenz werden SQL-Abfragen und andere nicht klassifizierte Anfragen als QUERY_TYPE_UNKNOWN angezeigt.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen der Seite Zugriffsmuster in der Google Cloud Console benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Aufrufen der Seite Zugriffsmuster in der Google Cloud Console erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um die Seite Zugriffsmuster in der Google Cloud Console aufzurufen:

  • Instanzdetails ansehen: bigtable.instances.get
  • Cluster, Anwendungsprofile und Tabellen auflisten: bigtable.clusters.list, bigtable.appProfiles.list, bigtable.tables.list
  • Messwerte für die Abfrageüberwachung: monitoring.timeSeries.list

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Zugriffsmuster

Wenn Ihre Anwendung eine Bigtable-Clientbibliothek verwendet, übersetzt die Clientbibliothek Ihre Methodenaufrufe in Bigtable Data API-Anfragen:

Bigtable klassifiziert jede eingehende Data API-Anfrage auf dem Server nach Abschluss anhand der folgenden Faktoren und nicht nur anhand des Methodennamens der Clientbibliothek:

  • Anfrageparameter: ob die Anfrage auf einen einzelnen Zeilenschlüssel, mehrere Zeilenschlüssel oder einen Zeilenbereich abzielt, ob die Anfrage reversed festlegt und welche Filter angewendet werden
  • Ausführungsstatistiken: die Anzahl der gescannten und zurückgegebenen Zeilen und Zellen sowie die Byte-Nutzlast

Wenn Sie beispielsweise eine Lesemethode für eine einzelne Zeile wie readRow aufrufen oder readRows mit einem einzelnen Zeilenschlüssel aufrufen, klassifiziert Bigtable die Anfrage in der Regel als Punktlesevorgang, der für die In-Memory-Stufe infrage kommt. Wenn für diesen Lesevorgang einer einzelnen Zeile jedoch ein komplexer Filter verwendet wird oder eine große Anzahl von Zellen gescannt wird, kann Bigtable ihn als dünnbesetzten Lesevorgang, Bulk-Lesevorgang oder anderen Lesevorgang klassifizieren. Wenn Sie dagegen readRows aufrufen, um mehrere Zeilenschlüssel zu lesen oder einen Zeilenbereich zu scannen, klassifiziert Bigtable die Anfrage als Bulk-Lesevorgang oder Scan, der nicht für die In-Memory-Stufe infrage kommt.

Auswertungsreihenfolge lesen

Da eine einzelne ReadRows Data API-Anfrage den Merkmalen mehrerer Kategorien entsprechen kann, wertet Bigtable Leseanfragen in der folgenden Reihenfolge aus und weist das erste übereinstimmende Zugriffsmuster zu:

  1. Punktlesevorgang
  2. Kurzer Scan (für Vorwärtsscans) oder kurzer Rückwärtsscan (wenn reversed auf true gesetzt ist)
  3. Umgekehrter Scan (für alle verbleibenden Leseanfragen, bei denen reversed auf true gesetzt ist)
  4. Dünnbesetzter Lesevorgang (wird vor dem Bulk-Lesevorgang ausgewertet, damit Bigtable Lesevorgänge mit mehreren Schlüsseln oder größere Vorwärtsscans mit starker Filtereliminierung als dünnbesetzt kennzeichnet)
  5. Bulk-Lesevorgang
  6. Sonstiges Lesen (für alle verbleibenden ReadRows-Anfragen)

Definitionen der Abfragetypen

In der folgenden Tabelle werden die einzelnen Zugriffsmusterkategorien, das entsprechende query_type-Label in Monitoring, die typischen Clientbibliotheksvorgänge und die zugrunde liegende Data API-Methode (method-Messwertlabel) beschrieben, für die sie gelten, sowie die Art und Weise, wie Bigtable Anfragen in diese Kategorie einordnet. Da die Methodennamen je nach Programmiersprache variieren, sind in der Tabelle repräsentative Methodennamen der Clientbibliothek aufgeführt. Sprachspezifische Codebeispiele finden Sie unter Lesebeispiele und Schreibbeispiele. Informationen zu einfachen und komplexen Filtern finden Sie in diesem Dokument im Abschnitt Einfache Filter im Vergleich zu komplexen Filtern.

Abfragetyp Messwertlabel für query_type Clientvorgang und Data API-Methode Klassifizierungskriterien
Punktlesevorgang QUERY_TYPE_POINT_READ

Lesen einer einzelnen Zeile, z. B. readRow oder readRows mit einem einzelnen Schlüssel

Data API: ReadRows

Ein Vorwärtslesen eines einzelnen Zeilenschlüssels, der keinen Filter oder einen einfachen Filter verwendet, wobei die Anzahl der gescannten und zurückgegebenen Zellen und die Gesamtgröße der Antwort innerhalb kleiner Grenzen für eine einzelne Zeile bleiben.

Kurzer Scan QUERY_TYPE_SHORT_SCAN

Zeilenbereichs- oder Präfixscan, z. B. readRows mit einem einzelnen Bereich oder Präfix

Data API: ReadRows

Ein Vorwärtsscan eines einzelnen zusammenhängenden Zeilenbereichs, der keinen Filter oder einen einfachen Filter verwendet, wobei die Anzahl der gescannten und zurückgegebenen Zeilen und Zellen sowie die Gesamtgröße der Antwort innerhalb kleiner Grenzen bleiben.

Kurzer Scan in umgekehrter Reihenfolge QUERY_TYPE_REVERSE_SHORT_SCAN

Umgekehrter Scan, z. B. readRows mit einem einzelnen Bereich oder Präfix in umgekehrter Reihenfolge

Data API: ReadRows

Ein umgekehrter Scan eines einzelnen zusammenhängenden Zeilenbereichs, der keinen Filter oder einen einfachen Filter verwendet und innerhalb derselben begrenzten Zeilen-, Zellen- und Byte-Limits wie ein kurzer Scan bleibt.

Scan in umgekehrter Reihenfolge QUERY_TYPE_REVERSE_SCAN

Umgekehrter Scan, z. B. readRows in umgekehrter Reihenfolge

Data API: ReadRows

Alle umgekehrten Lesevorgänge, die nicht als umgekehrter Kurzscan gelten, z. B. ein umgekehrter Scan, der die Zeilen-, Zellen- oder Byte-Limits für Kurzscans überschreitet, einzelne Zeilenschlüssel angibt, mehrere Zeilenbereiche scannt oder einen komplexen Filter verwendet.

Dünnbesetzter Lesevorgang QUERY_TYPE_SPARSE_READ

Gefiltertes Lesen oder Scannen über nicht erfasste Zellen hinweg mit readRow oder readRows

Data API: ReadRows

Alle Vorwärtsleseanfragen (ausgewertet nach Punktlesevorgang, kurzem Scan und umgekehrtem Scan), bei denen Bigtable aufgrund von Filtereliminierung oder nicht erfassten Zellen, die auf die automatische Speicherbereinigung warten, deutlich mehr Zeilen oder Zellen scannt als zurückgibt.

Bulk-Lesevorgang QUERY_TYPE_BULK_READ

Lesevorgang für mehrere Zeilen, z. B. readRows oder bulkReadRows mit mehreren Schlüsseln, oder ein großer Lesevorgang für eine einzelne Zeile mit readRow

Data API: ReadRows

Ein Vorwärtslesevorgang, bei dem ein oder mehrere Zeilenschlüssel ohne Filter oder mit einem einfachen Filter angegeben werden, die Limits für Punktlesevorgänge überschreitet (z. B. mehrere Zeilenschlüssel anfordert oder eine große einzelne Zeile liest) und nicht als dünnbesetzter Lesevorgang gilt.

Andere Lesevorgänge QUERY_TYPE_OTHER_READ

Großer Bereichsscan, Scan mehrerer Bereiche oder gefilterter Lesevorgang mit readRow oder readRows

Data API: ReadRows

Alle ReadRows-Anfragen, die nicht den vorherigen Lesekategorien entsprechen, z. B. Scans großer Weiterleitungsbereiche, Scans mehrerer Bereiche, Anfragen, die Zeilenschlüssel und Zeilenbereiche kombinieren, oder Lesevorgänge mit komplexen Filtern, die nicht als dünnbesetzt gelten.

Punktschreibvorgang QUERY_TYPE_POINT_WRITE

Einfacher Schreibvorgang, inkrementelles Update oder kleiner Batch-Schreibvorgang, z. B. mutateRow oder bulkMutateRows

Data API: MutateRow, MutateRows

Eine einzeilige MutateRow-Anfrage oder eine kleine MutateRows-Batchanfrage, die eine kleine Anzahl von Zeilen und Zellen mit einer kleinen Gesamt-Byte-Nutzlast ändert.

Sonstiger Schreibvorgang QUERY_TYPE_OTHER_WRITE

Großer Batch-Schreibvorgang oder großer einfacher Schreibvorgang, z. B. bulkMutateRows oder mutateRow

Data API: MutateRow, MutateRows

Alle MutateRow- oder MutateRows-Anfragen, die die Limits für Punkt-Schreibvorgänge überschreiten, z. B. größere Batch-Schreibvorgänge oder Schreibvorgänge mit einer großen Anzahl von Mutationen oder Byte-Nutzlasten.

Lese-/Schreibzugriff QUERY_TYPE_READ_WRITE

Bedingtes Schreiben oder Anhängen, z. B. checkAndMutateRow oder readModifyWriteRow

Data API: CheckAndMutateRow, ReadModifyWriteRow

Alle bedingten Schreibanfragen (CheckAndMutateRow) oder atomaren Inkrementierungs- oder Anfügeanfragen (ReadModifyWriteRow), unabhängig von der Nutzlastgröße.

In den Messwerten zur Anzahl der Anfragen und zur Latenz kennzeichnet Bigtable nicht klassifizierte Anfragen, z. B. GoogleSQL für Bigtable-Abfragen, als QUERY_TYPE_UNKNOWN.

Einfache Filter im Vergleich zu komplexen Filtern

Damit eine ReadRows-Anfrage als Punktlesevorgang, kurzer Scan, umgekehrter kurzer Scan oder Bulk-Lesevorgang gilt, darf sie entweder keinen Filter oder einen einfachen Filter verwenden.

Bigtable klassifiziert einen Filter als einfachen Filter, wenn er nur die folgenden Filtertypen verwendet, entweder allein oder kombiniert in einem begrenzten chain-Filter. Weitere Informationen finden Sie unter Kette.

  • Ohne Filter (FILTER_NOT_SET)
  • pass_all_filter oder block_all_filter
  • column_range_filter, column_qualifier_regex_filter oder family_name_regex_filter
  • cells_per_column_limit_filter, cells_per_row_limit_filter oder cells_per_row_offset_filter
  • timestamp_range_filter

Bigtable behandelt jede ReadRows-Anfrage als Anfrage mit einem komplexen Filter, wenn die Anfrage einen Filtertyp verwendet, der nicht in der vorherigen Liste enthalten ist, z. B. die folgenden, oder wenn sie eine große Anzahl von Filtern verkettet:

  • value_regex_filter
  • value_range_filter
  • row_key_regex_filter
  • row_sample_filter
  • interleave
  • condition
  • sink
  • strip_value_transformer
  • apply_label_transformer

Bigtable klassifiziert solche Anfragen als umgekehrten Scan, wenn reversed den Wert true hat, und andernfalls als dünnbesetzten Lesevorgang (wenn deutlich mehr Zeilen oder Zellen gescannt als zurückgegeben werden) oder als anderen Lesevorgang.

Zugriffsmuster ansehen

Sie können die Seite Zugriffsmuster in der Google Cloud Console entweder auf Instanz- oder Clusterebene aufrufen.

Zugriffsmuster für eine Instanz ansehen

  1. Öffnen Sie in der Google Cloud Console die Liste der Bigtable-Instanzen.

    Liste der Instanzen öffnen

  2. Klicken Sie auf die Instanz, deren Messwerte Sie sehen möchten.

  3. Klicken Sie im Navigationsbereich unter Beobachtbarkeit auf Zugriffsmuster.

  4. Wählen Sie in der Liste Cluster den Cluster aus, dessen Zugriffsmuster Sie prüfen möchten. Standardmäßig wird in der Google Cloud Console der erste Cluster in der Instanz ausgewählt.

  5. Wählen Sie in der Liste Gruppieren nach aus, wie die Diagramme aufgeschlüsselt werden sollen:

    • Keine: Standardoption, bei der alle Diagramme nach Zugriffsmuster aufgeschlüsselt werden, z. B. QUERY_TYPE_POINT_READ
    • Anwendungsprofil: schlüsselt alle Diagramme nach Anwendungsprofil-ID und Zugriffsmuster auf
    • Tabelle: schlüsselt alle Diagramme nach Tabellen-ID und Zugriffsmuster auf
  6. Optional: Wenn Sie den Zeitraum ändern oder die automatische Aktualisierung aktivieren oder deaktivieren möchten, verwenden Sie die Zeitraumauswahl.

Zugriffsmuster für einen Cluster ansehen

  1. Öffnen Sie in der Google Cloud Console die Liste der Bigtable-Instanzen.

    Liste der Instanzen öffnen

  2. Klicken Sie auf die Instanz, deren Messwerte Sie sehen möchten.

    Die Übersichtsseite der Instanz wird geöffnet.

  3. Klicken Sie in der Clustertabelle auf die Cluster-ID.

  4. Klicken Sie im Navigationsbereich auf Zugriffsmuster. Auf der Seite werden Messwerte für den ausgewählten Cluster angezeigt.

  5. Wählen Sie in der Liste Gruppieren nach aus, wie die Diagramme aufgeschlüsselt werden sollen:

    • Keine: Standardoption, bei der alle Diagramme nach Zugriffsmuster aufgeschlüsselt werden, z. B. QUERY_TYPE_POINT_READ
    • Anwendungsprofil: schlüsselt alle Diagramme nach Anwendungsprofil-ID und Zugriffsmuster auf
    • Tabelle: schlüsselt alle Diagramme nach Tabellen-ID und Zugriffsmuster auf
  6. Optional: Wenn Sie den Zeitraum ändern oder die automatische Aktualisierung aktivieren oder deaktivieren möchten, verwenden Sie die Zeitraumauswahl.

Diagramme und Messwerte auf der Seite „Zugriffsmuster“

Auf der Seite Zugriffsmuster finden Sie Diagramme für die folgenden Messwerte:

Messwert Verfügbar für Beschreibung
Verteilung der Abfragen pro Sekunde Cluster
Tabellen
Anwendungsprofile

Der Anteil und die durchschnittliche Rate der Anfragen pro Sekunde, aggregiert über den gesamten ausgewählten Zeitraum für den Cluster, aufgeschlüsselt nach query_type und der ausgewählten Option Gruppieren nach.

Latenz Cluster
Tabellen
Anwendungsprofile

Die serverseitige Anfragelatenz im Zeitverlauf, aufgeschlüsselt nach query_type und der ausgewählten Option Gruppieren nach. Über das Perzentilmenü im Diagramm können Sie zwischen dem 99. Perzentil (Standard), dem 95. Perzentil und dem 50. Perzentil wechseln.

Abfragen pro Sekunde Cluster
Tabellen
Anwendungsprofile

Die Rate der Anfragen pro Sekunde im Zeitverlauf, aufgeschlüsselt nach query_type und der ausgewählten Option Gruppieren nach.

Zurückgegebene Zeilen Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Zeilen, die Bigtable pro Sekunde für Lese- und Lese-/Schreibanfragen nach Anwendung von Filtern an den Client zurückgibt.

Gescannte Zeilen Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Zeilen, die Bigtable pro Sekunde beim Verarbeiten von Lese- und Lese-/Schreibanfragen liest, bevor Filter angewendet werden. Wenn Sie Gescannte Zeilen mit Zurückgegebene Zeilen vergleichen, können Sie ineffiziente Lesefilter identifizieren.

Geänderte Zeilen Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Zeilen, die pro Sekunde durch Schreib- und Lese-/Schreibanfragen geändert werden.

Gefundene Zellen Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Zellen, die Bigtable pro Sekunde bei Lese- und Lese-/Schreibanfragen prüft, bevor Filter angewendet werden, einschließlich Zellen, die herausgefiltert werden oder auf die automatische Speicherbereinigung warten.

Gesendete Zellen Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Zellen, die Bigtable nach dem Anwenden von Filtern pro Sekunde an den Client zurückgibt. Wenn Sie Gesehene Zellen mit Gesendete Zellen vergleichen, können Sie Leseanfragen identifizieren, bei denen für jede zurückgegebene Zelle viele Zellen geprüft werden.

Gesendete Byte Cluster
Tabellen
Anwendungsprofile

Die Anzahl der Byte codierter Zeilendaten, die pro Sekunde zurückgegeben werden.

Sie können diese Messwerte auch programmatisch mit der Cloud Monitoring API abfragen, im Metrics Explorer ansehen oder benutzerdefinierten Dashboards hinzufügen. Jeder bigtable.googleapis.com/query_type/*-Messwert für die überwachte Ressource bigtable_table enthält die folgenden Labels:

  • Ressourcenlabels: project_id, instance, cluster und table
  • Messwertlabels: query_type, app_profile und method

Weitere Informationen zum Abfragen von Bigtable-Messwerten in Monitoring finden Sie unter Mit Monitoring überwachen und Messwerte.

Arbeitslasten basierend auf Zugriffsmustern optimieren

Anhand der Messwerte auf der Seite Zugriffsmuster können Sie die folgenden Entscheidungen treffen:

  • In-Memory-Stufe für Punktlesevorgänge mit niedriger Latenz aktivieren: Wenn die Diagramme QPS-Verteilung, QPS und Latenz ein hohes Volumen an QUERY_TYPE_POINT_READ-Anfragen für Tabellen oder Anwendungsprofile mit strengen Leselatenzzielen zeigen, sollten Sie die In-Memory-Stufe aktivieren, die in der Enterprise Plus-Version verfügbar ist. Gruppieren Sie die Diagramme nach Tabelle oder Anwendungsprofil, um zu ermitteln, welche Tabellen und Arbeitslasten am meisten profitieren.
  • Große Scans und Batch-Lesevorgänge mit Data Boost isolieren: Wenn Sie ein hohes Volumen oder regelmäßige Spitzen bei QUERY_TYPE_BULK_READ- oder QUERY_TYPE_OTHER_READ-Anfragen feststellen, die sich einen Cluster mit latenzempfindlichem Bereitstellungstraffic teilen, gruppieren Sie nach Anwendungsprofil, um die Quelle der Scans zu ermitteln. Leiten Sie Batch-, Berichts- oder Analyse-Lesevorgänge über ein dediziertes Anwendungsprofil weiter, das für die Verwendung von serverlosem Computing von Data Boost konfiguriert ist, damit große Scans nicht mit Bereitstellungsknoten um CPU-Ressourcen konkurrieren.
  • Filteraufwand reduzieren und automatische Speicherbereinigung optimieren: Wenn Sie eine hohe Rate an QUERY_TYPE_SPARSE_READ-Anfragen sehen, wenn Gescannte Zeilen viel höher ist als Zurückgegebene Zeilen oder wenn Gesehene Zellen viel höher ist als Gesendete Zellen, scannen Ihre Leseanfragen Daten, die Bigtable nicht an den Client zurückgibt. So verbessern Sie die Leseeffizienz:
    • Grenzen Sie die Zeilenschlüsselbereiche oder Präfixe in der Leseanfrage ein, anstatt sich auf Wert- oder reguläre Ausdrucksfilter zu verlassen, um Zeilen zu verwerfen.
    • Fügen Sie einen Filter für das Zellenlimit ein, z. B. cells_per_column_limit_filter, wenn Ihre Anwendung nur die neuesten Zellenversionen benötigt. Weitere Informationen finden Sie unter Limit für Zellen pro Spalte.
    • Überprüfen Sie Ihre Richtlinien für die automatische Speicherbereinigung, damit sich abgelaufene oder veraltete Zellenversionen nicht ansammeln und Scans verlangsamen. Weitere Informationen finden Sie unter Übersicht über die automatische Speicherbereinigung.
  • Rückwärtsscans durch Vorwärtsscans ersetzen: Wenn Sie häufig QUERY_TYPE_REVERSE_SCAN- oder QUERY_TYPE_REVERSE_SHORT_SCAN-Anfragen mit erhöhter Latenz beobachten, sollten Sie Ihre Zeilenschlüssel so gestalten, dass Ihre Anwendung Vorwärtsscans ausführen kann. Weitere Informationen finden Sie unter Best Practices für das Schemadesign.

Nächste Schritte