8 min read

Vergleich der Leistung analytischer Abfragen von AlloyDB mit BigQuery

Published on
September 17, 2023
Author
Aliz Team
Aliz Team
Company
Subscribe to our newsletter
Subscribe
Vergleich der Leistung analytischer Abfragen von AlloyDB mit BigQuery

AlloyDB ist ein vollständig verwalteter, PostgreSQL-kompatibler Datenbankdienst, der ACID-konforme Transaktionen (Atomicity, Consistency, Isolation, durability) unterstützt. Einige seiner Ansprüche sind:

  • 4x schneller als Standard PostgreSQL für transaktionale Arbeitslasten.
  • Bis zu 100x schnellere analytische Abfragen als Standard-PostgreSQL.

Dieses Experiment konzentriert sich auf einen Vergleich der Leistung von analytischen Abfragen zwischen AlloyDB und BigQuery. Es gibt einen offiziellen Google-Cloud-Blog zum Benchmarking für AlloyDB, der jedoch mit Standard-PostgreSQL verglichen wird. Das Benchmark-Setup wird diesem Leitfaden folgen, mit zusätzlichen Teilen, um die Abfragen auch auf BigQuery laufen zu lassen.

Komponenten

Werfen wir einen Blick auf die AlloyDB-Komponenten.

Wir erstellen einen Cluster , der alle Ressourcen, wie Datenbanken, Protokolle und andere Metadaten, organisiert.

Ein Cluster enthält mehrere Knoten, d. h. virtuelle Maschineninstanzen, die für die Ausführung der Abfrage bestimmt sind. AlloyDB organisiert die Knoten in Instanzen. Es gibt zwei Arten von Instanzen:

  • Primäre Instanz. Jeder Cluster hat eine primäre Instanz, die Lese- und Schreibzugriff bietet. Die primäre Instanz hat zwei Knoten, um hohe Verfügbarkeit zu gewährleisten: einen aktiven Knoten und einen Standby-Knoten.
  • Der Cluster kann optional eine oder mehrere Read-Pool-Instanzen haben, die den Lesezugriff ermöglichen. AlloyDB sorgt automatisch für einen Lastausgleich bei allen Anfragen, die an eine Lesepool-Instanz gesendet werden.

Transaktionale und analytische Aspekte

Zwei Google Cloud Blog-Artikel erläutern die transaktionalen und analytischen Aspekte von AlloyDB for PostgreSQL:

1. Intelligente, datenbankgestützte Speicherung

Einige der wichtigsten Punkte aus diesem Artikel sind:

  • Durch die Disaggregation von Berechnung und Speicherung reduziert AlloyDB E/A-Engpässe und verlagert viele Datenbankoperationen auf die Speicherebene durch den Einsatz des Log Processing Service.

Der Protokollverarbeitungsdienst (LPS) ist ein AlloyDB-interner Dienst, der WAL-Datensätze verarbeitet und Datenbankblöcke erzeugt. Die Rechenschicht kommuniziert nur die WAL-Datensätze an die Speicherschicht. Es sind keine Blockschreibvorgänge erforderlich.

(Folie von der AlloyDB Partner Office Hours Anfang des Jahres)

  • AlloyDB verwendet einen regionalen Protokollspeicher mit geringer Latenz, der es dem System ermöglicht, WAL-Protokollsätze schnell zu löschen. Das bedeutet, dass der Transaktions-Commit ein sehr schneller Vorgang ist.

Auch in anderen Bereichen wie Replikation und Wiederherstellung gibt es zahlreiche Leistungsoptimierungen, so dass sich ein Blick in den Artikel lohnt. Die beiden oben genannten Punkte sind Highlights, die eng mit dem Transaktionsaspekt zusammenhängen.

2. Säulenförmige Engine

Ein wichtiges Highlight des Artikels ist, dass AlloyDB maschinelles Lernen verwendet, um auf intelligente Weise die besten Tabellen/Spalten auszuwählen, die im Spaltenformat gehalten werden sollen, und diese Daten später automatisch im Speicher zu halten. Beachten Sie, dass wir beim analytischen Benchmarking die Abfragen zunächst als "Warm-up" ausführen müssen, damit AlloyDB die Arbeitslasten prüfen kann. Erst danach messen wir die Leistung.

(Folie von der AlloyDB Partner Office Hours Anfang des Jahres)

Die Columnar-Engine ermöglicht nicht nur Aggregationsoperationen direkt auf den relevanten Spalten, ohne die Ergebnisse des Scans zu materialisieren, sondern beinhaltet auch mehrere algorithmische Optimierungen durch die Nutzung spaltenspezifischer Metadaten wie Min-Max-Werte, um den Scan zu beschleunigen.

Vergleich mit BigQuery

Wann zu verwenden?

Diese Folie unten ist eine Empfehlung aus den Partner Office Hours zu diesem Thema, die wir versuchen werden, im Benchmark zu überprüfen.

Benchmark

TPCH-H-Datensatz

Wir verwenden den TPC-H-Datensatz für das Benchmarking. Ein TPC-H-Benchmark ist ein Transaktionsverarbeitungs- und Datenbank-Benchmark, der speziell für die Entscheidungsunterstützung, d. h. die Analyse, durchgeführt und vom Transaction Processing Performance Council verwaltet wird.

In diesem TPC-H-Setup haben wir acht Tabellen, deren Größe eingestellt werden kann, und Abfragen, die aus Joins und Aggregationen bestehen, um analytische Abfragen darzustellen.

Sie können die TPC-H-Spezifikation in diesem offiziellen Dokument überprüfen, insbesondere in Abschnitt 2.4 , um zu sehen, welche Abfragen verwendet werden.

TPCH_SCALE bestimmt die Größe der Daten in den Tabellen. Zum Beispiel:

- TPCH_SCALE=10 ergibt eine Gesamtzahl von 86.586.082 Zeilen, ~20 GB.

- TPCH_SCALE=30 ergibt eine Gesamtzahl von 259.798.402 Zeilen, ~60 GB.

Benchmark-Einrichtung

In diesem Experiment wird AlloyDB mit dieser Spezifikation verwendet:

- Datenbankversion: PostgreSQL 14

- Region: us-central1

- Maschinentyp: 16vCPU / 128GB

Sowohl TPCH scale 10 als auch 30 passen in den Speicher der Columnar Engine. Die Datenbankflags, die gesetzt werden, sind:

  • work_mem = 65536. Eine Erhöhung des work_mem-Wertes kann die Leistung von Abfragen verbessern, die viel temporäre Arbeit wie Sortieren, Hashing, Bitmap usw. ausführen. Wenn die AlloyDB-Instanz nicht über ausreichend Speicher verfügt, kann ein sehr hoher work_mem-Wert zu Leistungsproblemen führen.  Da wir 128 GB Speicher verwenden und die Daten noch hineinpassen, können wir diesen Wert auf etwa die Hälfte des Gesamtspeichers beschränken.
  • google_columnar_engine_enabled = ON
  • google_columnar_engine.relations = [alle TPCH-Tabellen]. Diese Konfiguration

Schlussfolgerung

Auf der Grundlage dieses spezifischen Experiments kann AlloyDB innerhalb eines bestimmten Schwellenwerts, in diesem Fall ~60 GB Daten, analytische Abfragen durchführen, die mit BigQuery vergleichbar sind. In diesem Experiment wurden alle Abfragen in weniger als 1 Minute abgeschlossen, was wohl tolerierbar ist, wenn man bedenkt, dass AlloyDB in erster Linie für transaktionale Workloads verwendet werden sollte. Die angekündigte hybride transaktionale und analytische Verarbeitung (HTAP) von AlloyDB scheint vielversprechend.

Mehr als 60 GB wären jedoch fragwürdig, da wir dem AlloyDB-Cluster mehr Ressourcen hinzufügen müssen. Die Leistung wäre schlechter als bei BigQuery, wo alle diese Abfragen in weniger als 10 Sekunden abgeschlossen wurden, ohne dass Tabellenpartitionierung oder Clustering verwendet wurden.

Wertangebot für Kunden

  • AlloyDB ist eine gute Option, wenn der Kunde seine Datenbank migrieren muss, um die Transaktionsarbeitslasten zu verbessern und gleichzeitig zusätzliche Funktionen für die Verarbeitung analytischer Arbeitslasten zu erhalten.
  • Wenn die Daten zu groß sind, wäre es viel besser, ETL/ELT in BigQuery durchzuführen und die analytischen Aufgaben dort zu erledigen.
Author
Aliz Team
Company
Subscribe to our newsletter
Subscribe