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:
-
Bigtable-Ressourcen ansehen:
- Bigtable Viewer (
roles/bigtable.viewer) - Bigtable-Leser (
roles/bigtable.reader)
- Bigtable Viewer (
-
Monitoring-Zeitreihendaten ansehen:
Monitoring-Betrachter (
roles/monitoring.viewer)
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:
- Lesevorgänge: Alle Lesemethoden der Clientbibliothek senden eine
ReadRows-Data API-Anfrage. Dazu gehören Lesevorgänge für einzelne Zeilen wiereadRow, Lesevorgänge für mehrere Zeilen wiereadRowsoderbulkReadRowsmit mehreren Zeilenschlüsseln sowie Scans von Zeilenbereichen oder Präfixen wiereadRowsmit einem Bereich oder Präfix. - Schreibvorgänge: Schreibmethoden der Clientbibliothek senden eine
MutateRow-Anfrage für einfache Schreibvorgänge und inkrementelle Aktualisierungen, eineMutateRows-Anfrage für Batch-Schreibvorgänge, eineCheckAndMutateRow-Anfrage für bedingte Schreibvorgänge oder eineReadModifyWriteRow-Anfrage für Anfügungen und Inkremente.
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
reversedfestlegt 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:
- Punktlesevorgang
- Kurzer Scan (für Vorwärtsscans) oder kurzer Rückwärtsscan (wenn
reversedauftruegesetzt ist) - Umgekehrter Scan (für alle verbleibenden Leseanfragen, bei denen
reversedauftruegesetzt ist) - 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)
- Bulk-Lesevorgang
- 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. Data API: |
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. Data API: |
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. Data API: |
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. Data API: |
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 Data API: |
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. Data API: |
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 Data API: |
Alle |
| Punktschreibvorgang | QUERY_TYPE_POINT_WRITE |
Einfacher Schreibvorgang, inkrementelles Update oder kleiner Batch-Schreibvorgang, z. B. Data API: |
Eine einzeilige |
| Sonstiger Schreibvorgang | QUERY_TYPE_OTHER_WRITE |
Großer Batch-Schreibvorgang oder großer einfacher Schreibvorgang, z. B. Data API: |
Alle |
| Lese-/Schreibzugriff | QUERY_TYPE_READ_WRITE |
Bedingtes Schreiben oder Anhängen, z. B. Data API: |
Alle bedingten Schreibanfragen ( |
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_filteroderblock_all_filtercolumn_range_filter,column_qualifier_regex_filteroderfamily_name_regex_filtercells_per_column_limit_filter,cells_per_row_limit_filterodercells_per_row_offset_filtertimestamp_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_filtervalue_range_filterrow_key_regex_filterrow_sample_filterinterleaveconditionsinkstrip_value_transformerapply_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
Öffnen Sie in der Google Cloud Console die Liste der Bigtable-Instanzen.
Klicken Sie auf die Instanz, deren Messwerte Sie sehen möchten.
Klicken Sie im Navigationsbereich unter Beobachtbarkeit auf Zugriffsmuster.
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.
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
- Keine: Standardoption, bei der alle Diagramme nach Zugriffsmuster aufgeschlüsselt werden, z. B.
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
Öffnen Sie in der Google Cloud Console die Liste der Bigtable-Instanzen.
Klicken Sie auf die Instanz, deren Messwerte Sie sehen möchten.
Die Übersichtsseite der Instanz wird geöffnet.
Klicken Sie in der Clustertabelle auf die Cluster-ID.
Klicken Sie im Navigationsbereich auf Zugriffsmuster. Auf der Seite werden Messwerte für den ausgewählten Cluster angezeigt.
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
- Keine: Standardoption, bei der alle Diagramme nach Zugriffsmuster aufgeschlüsselt werden, z. B.
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 |
| Latenz | Cluster Tabellen Anwendungsprofile |
Die serverseitige Anfragelatenz im Zeitverlauf, aufgeschlüsselt nach |
| Abfragen pro Sekunde | Cluster Tabellen Anwendungsprofile |
Die Rate der Anfragen pro Sekunde im Zeitverlauf, aufgeschlüsselt 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,clusterundtable - Messwertlabels:
query_type,app_profileundmethod
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- oderQUERY_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- oderQUERY_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
- Instanzleistung mit Systemstatistiken überwachen
- Nutzungsmuster von Zeilenschlüsseln mit Key Visualizer analysieren
- Fehlerbehebung bei Latenz