Wenn Sie den Durchsatz und die Latenz Ihrer Transaktionsarbeitslasten in AlloyDB for PostgreSQL bewerten möchten, können Sie AlloyDB und einen Clientcomputer so konfigurieren, dass die Leistung der Online-Transaktionsverarbeitung (OLTP) mithilfe von TPC-C, einer branchenüblichen OLTP-Benchmark-Spezifikation, gemessen wird. Sie können auch benutzerdefinierte lese- und schreibintensive OLTP-Szenarien ausführen, z. B. Nur Index einfügen und Nur auswählen.
Die Anleitung in diesem Dokument basiert auf einer bestimmten Konfiguration von AlloyDB und dem Clientcomputer. Verwenden Sie die angegebenen Werte für jeden Schritt in der Benchmarking-Anleitung.
AlloyDB-Arbeitslastfunktionen
AlloyDB bietet Zuverlässigkeit, Skalierbarkeit und Leistung auf Unternehmensniveau, die für alle Unternehmen und kritischen Arbeitslasten geeignet sind. AlloyDB bietet die folgenden Komponenten und Funktionen, die eine hohe Leistung für Ihre transaktionalen (OLTP), analytischen (OLAP) und hybriden (HTAP) Arbeitslasten ermöglichen:
- Log- und Transaktionsverwaltung
- Dynamische Speicherverwaltung
- Integration von künstlicher Intelligenz und maschinellem Lernen
- Integrierte spaltenbasierte Engine
- Ein mehrstufiger Cache
- Verteilter und skalierbarer Speicher
Bei relationalen Datenbanksystemen muss ein Datenbankadministrator die Datenbank für das Benchmarking optimieren. Dazu gehört das Konfigurieren der Einstellungen für das Transaktionslog, das Festlegen der richtigen Pufferpoolgrößen und das Ändern anderer Datenbankparameter oder -flags und -merkmale. Diese Einstellungen variieren je nach Größe und Typ der Instanz.
AlloyDB ist für jeden Maschinentyp mit optimierten Einstellungen vorkonfiguriert. Bei AlloyDB müssen Sie keine Flags auf Datenbankebene anpassen, um eine hohe OLTP-Leistung zu erzielen. Stattdessen ist eine hohe OLTP-Leistung in AlloyDB integriert.
Unterstützte Benchmarktypen
In diesem Dokument wird beschrieben, wie Sie OLTP-Benchmarks mit den folgenden Tools ausführen:
| OLTP-Benchmark-Treiber | Anwendungsfälle |
|---|---|
| HammerDB | HammerDB misst die Leistung des Systems in Transaktionen pro Minute (TPM) und generiert Berichte mit detaillierten Statistiken und Leistungsmesswerten.
HammerDB unterstützt die Anpassung von Benchmark-Parametern, sodass Sie die Datenbankgröße, die Anzahl der Warehouses und andere Arbeitslastmerkmale anpassen können, um verschiedene Szenarien zu simulieren. HammerDB enthält eine TPC-C-Benchmark-Implementierung zur Bewertung der Leistung von OLTP-Systemen. Mit der HammerDB-TPC-C-Implementierung können Sie eine Arbeitslast simulieren, die dem TPC-C-Benchmark ähnelt, einschließlich einer Mischung aus Transaktionen, die das Verhalten einer Großhandelsumgebung nachahmen. |
| pgbench | pgbench ist ein Benchmarking-Tool, das im Lieferumfang von PostgreSQL enthalten ist. Mit pgbench können Sie Transaktionsarbeitslasten wie das Einfügen, Aktualisieren und Auswählen von Daten simulieren und die Leistung des Datenbanksystems in Transaktionen pro Sekunde (TPS) messen. Wenn Sie pgbench verwenden, können Sie die Datenbankgröße, die Anzahl der Clients und den Transaktionsmix anpassen, um Ihre Produktionsarbeitslast zu emulieren und Einblicke in das Verhalten des Systems in verschiedenen Szenarien zu erhalten. pgbench enthält eine TPC-B-Implementierung. Die pgbench-TPC-B-Implementierung ähnelt einem TPC-B-Benchmark. |
Hinweis
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, and Resource Manager APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Aktivieren Sie die Cloud APIs, die zum Erstellen von AlloyDB for PostgreSQL und zum Herstellen einer Verbindung erforderlich sind.
Klicken Sie im Schritt Projekt bestätigen auf Weiter, um den Namen des Projekts zu bestätigen, an dem Sie Änderungen vornehmen möchten.
Klicken Sie im Schritt APIs aktivieren auf Aktivieren, um Folgendes zu aktivieren:
- AlloyDB API
- Compute Engine API
- Cloud Resource Manager API
- Service Networking API
Die Service Networking API ist erforderlich, wenn Sie die Netzwerkverbindung zu AlloyDB über ein VPC-Netzwerk konfigurieren möchten, das sich im selben Google Cloud -Projekt wie AlloyDB befindet.
Die Compute Engine API und die Cloud Resource Manager API sind erforderlich, wenn Sie die Netzwerkverbindung zu AlloyDB über ein VPC-Netzwerk konfigurieren möchten, das sich in einem anderen Google Cloud -Projekt befindet.
Datenbank und Clientcomputer einrichten und bereitstellen
Starten Sie den Benchmark, indem Sie einen AlloyDB-Cluster und eine AlloyDB-Instanz erstellen. Sofern nicht anders angegeben, basieren die Informationen in diesem Dokument auf einer primären AlloyDB-Instanz mit 16 vCPUs und 128 GB RAM.
AlloyDB-Cluster und -Instanz erstellen
Zur Clusterseite.
Klicken Sie auf Cluster erstellen.
Geben Sie im Feld Cluster-ID einen Namen für den Cluster ein.
Wählen Sie unter Zonale Verfügbarkeit die Option Mehrere Zonen (Hochverfügbarkeit) für den Clustertyp aus.
Wählen Sie das Standardnetzwerk aus.
Wählen Sie im Feld Datenbankversion eine der folgenden Optionen aus:
PostgreSQL 17
PostgreSQL 18
Notieren Sie sich den Standort der primären Zone und die private IP-Adresse. Erstellen Sie keinen Lesepool.
Klicken Sie auf Cluster erstellen.
Clientcomputer bereitstellen
Zum Ausführen von OLTP-Benchmarks benötigen Sie einen Clientcomputer mit ausreichender Rechenleistung. Benchmark-Tools wie HammerDB und pgbench werden hochgradig parallel ausgeführt und verbrauchen viel CPU. Ein Clientcomputer darf beim Ausführen eines OLTP-Benchmarks kein Engpass sein.
Sofern nicht anders angegeben, wird in den Anleitungen in diesem Dokument eine E2-Standard-32-Maschine mit 128 GB Speicherplatz als Client für OLTP-Benchmarks verwendet, um eine AlloyDB-Instanz auf einer Maschine mit 16 vCPUs und 128 GB RAM auszuführen. Sie müssen den Clientcomputer in derselben Zone wie die primäre AlloyDB-Instanz erstellen.
Wenn Sie den TPC-C-Benchmark auf einer AlloyDB-Primärinstanz mit 16 virtuellen CPUs ausführen möchten, führen Sie die folgenden Schritte aus, um eine Compute Engine-VM zu erstellen und einen Clientcomputer bereitzustellen:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:
- Wählen Sie das Projekt aus, das die AlloyDB-Instanz enthält, zu der Sie eine Verbindung herstellen möchten.
- Klicken Sie auf Instanz erstellen.
- Klicken Sie auf den Bereich Maschinenkonfiguration.
- Geben Sie einen Namen für die Instanz ein.
- Konfigurieren Sie die Zone, in der Sie die Instanz erstellen möchten. Die Zone muss mit der Zone der primären AlloyDB-Instanz übereinstimmen.
- Wählen Sie den Maschinentyp e2-standard-32 aus.
- Behalten Sie die Standardwerte im Bereich Betriebssystem und Speicher bei.
- Klicken Sie auf den Abschnitt Netzwerk und legen Sie für Netzwerkschnittstellen das VPC-Netzwerk fest, das für den Zugriff auf private Dienste auf AlloyDB konfiguriert ist.
Wenn Netzwerkschnittstellen nicht auf das VPC-Netzwerk festgelegt ist, das für den Zugriff auf private Dienste konfiguriert ist, maximieren Sie es und legen Sie dann Netzwerk auf das VPC-Netzwerk fest. - Behalten Sie die Standardwerte im Abschnitt Beobachtbarkeit bei.
- Klicken Sie auf den Abschnitt Sicherheit.
- Legen Sie unter Identität und API-Zugriff die Zugriffsbereiche auf Uneingeschränkten Zugriff auf alle Cloud APIs zulassen fest.
- Behalten Sie die Standardwerte im Abschnitt Erweitert bei.
- Klicken Sie auf Erstellen.
- Nachdem die VM erstellt wurde, stellen Sie über SSH eine Verbindung zur Compute Engine-VM her, die Sie erstellt haben.
Benchmark-Treibermaschine einrichten
Nachdem Sie die Datenbank und den Clientcomputer installiert und eingerichtet haben, konfigurieren Sie den Clientcomputer, der auf Google Cloudausgeführt wird. Dort installieren Sie Benchmarking-Tools wie HammerDB und pgbench.
So richten Sie die Benchmark-Treibermaschine ein:
Stellen Sie mit dem folgenden
gcloud compute ssh-Befehl eine Verbindung zum Clientcomputer her:gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"PostgreSQL-Client installieren
Verwenden Sie den folgenden Befehl, um einen PostgreSQL-Client mit einer psql-Anwendung zu installieren, und prüfen Sie dann, ob Sie eine Verbindung herstellen können.
sudo apt-get update sudo apt install postgresql-clientVerwenden Sie den folgenden Befehl, um zu prüfen, ob der Client funktioniert und Sie eine Verbindung zu AlloyDB herstellen können. Verwenden Sie die private IP-Adresse Ihrer primären AlloyDB-Instanz.
psql -h PRIVATE_IP -U postgres
Installieren Sie den HammerDB-4.6-Treiber für den TPC-C-Benchmark mit den folgenden Befehlen:
mkdir hammerdb pushd hammerdb curl -OL https://github.com/TPC-Council/HammerDB/releases/download/v4.6/HammerDB-4.6-Linux.tar.gz tar zxvf HammerDB-4.6-Linux.tar.gzInstallieren Sie den pgbench-Treiber für TPC-B und verschiedene OLTP-Benchmarks mit den folgenden Befehlen:
sudo apt-get update sudo apt-get install postgresql-contrib pgbench --versionWenn
pgbench --versionohne Fehler ausgeführt wird, ist pgbench installiert.
Benchmark-Bereinigung durchführen
Wenn Sie mehrere Benchmarks nacheinander ausführen möchten, müssen Sie zwischen den einzelnen Benchmarks eine Benchmark-Bereinigung durchführen, um genaue und zuverlässige Benchmarking-Ergebnisse zu erhalten.
Durch eine Benchmark-Bereinigung wird sichergestellt, dass sich Resteffekte aus vorherigen Benchmarks nicht auf die Leistungsmessungen der neuen Benchmark auswirken. Benchmark-Bereinigungen tragen auch dazu bei, die Konsistenz und Wiederholbarkeit der Benchmark-Ergebnisse zu gewährleisten. Dies ist wichtig, um aussagekräftige Vergleiche zwischen verschiedenen Systemen anzustellen oder Bereiche für die Optimierung von Hardware, Software oder Konfiguration zu identifizieren.
So führen Sie eine Benchmark-Bereinigung durch, bevor Sie einen weiteren Benchmark ausführen:
Löschen Sie die vorherigen Benchmarkdaten oder die Benchmarkdatenbank. Verwenden Sie den folgenden
psql-Befehl auf dem Clientcomputer, um die vorherige Benchmark-Datenbank zu löschen:psql -h PRIVATE_IP -U postgres -c "DROP DATABASE IF EXISTS <database_name>;"Weitere Informationen zur Verwendung von
psqlfinden Sie unter Verbindung zu einer Datenbank herstellen.Starten Sie die AlloyDB-Instanz neu. In diesem Schritt werden Caches auf Datenbank- und Betriebssystemebene geleert.
TPC-C-Benchmark ausführen
HammerDB ist ein Benchmarking-Tool, das eine TPC-C-Benchmark-Implementierung zur Bewertung der Leistung von OLTP-Systemen enthält. Mit der TPC-C-Implementierung von HammerDB können Sie eine Arbeitslast simulieren, die dem TPC-C-Benchmark ähnelt, einschließlich einer Mischung aus Transaktionen, die das Verhalten einer Großhandelsumgebung nachahmen.
HammerDB misst die Leistung des Systems in Transaktionen pro Minute (TPM) und generiert Berichte mit detaillierten Statistiken und Leistungsmesswerten. Darüber hinaus unterstützt HammerDB die Anpassung der Benchmark-Parameter, sodass Nutzer die Datenbankgröße, die Anzahl der Warehouses und andere Arbeitslastmerkmale anpassen können, um verschiedene Szenarien zu simulieren.
Szenarien für die Leistungsbewertung
Die Leistung des TPC-C-Benchmarkings wird mit den folgenden Methoden bewertet:
Teilweise (~30%) im Cache gespeicherter Modus: In diesem Modus wird eine große TPC-C-Datenbank generiert, die nur teilweise in den Zwischenspeicher passt. Die Transaktionen in diesem Modus werden nicht immer aus dem Arbeitsspeicher bereitgestellt und verursachen E/A-Vorgänge in den zugrunde liegenden Speichersubsystemen. Dieses Szenario ist für die OLTP-Anforderungen vieler Nutzer geeignet.
Vollständig (100%) im Cache gespeicherter Modus: In diesem Modus passt die TPC-C-Datenbank vollständig in den Zwischenspeicher. Die AlloyDB-Instanz verwendet etwa 90% der verfügbaren 128 GB RAM, einschließlich des Zwischenspeichers.
Da TPC-C-Transaktionen in diesem Modus nur minimale E/A-Vorgänge ausführen, weil Lesevorgänge hauptsächlich aus dem Zwischenspeicher bedient werden, ist im Vergleich zu teilweise im Cache gespeicherten Ausführungen ein höherer TPM-Wert zu erwarten. Dieses Szenario gilt für die OLTP-Anforderungen von Nutzern mit sehr geringen E/A-Anforderungen.
Clientcomputer einrichten
Wenn Sie mehrere Benchmarks nacheinander ausführen, führen Sie eine Benchmark-Bereinigung durch.
Öffnen Sie die
hammerdb/HammerDB-4.6 directorymit dem folgenden Befehl:cd hammerdb/HammerDB-4.6Sie führen Befehle aus diesem Verzeichnis aus, um den Clientcomputer einzurichten.
Erstellen Sie die Datei
setup.envmit den folgenden Befehlen:cat << EOF > setup.env# Private IP of the AlloyDB primary instance export PGHOST=PRIVATE_IP# Postgres default port address. You do not need to change it unless you use non-default port address. export PGPORT=5432 # default port to connect with postgres# Number of TPC-C warehouses to load. This determines the overall database size. export NUM_WAREHOUSE=576# Number of users for running the benchmark. export NUM_USERS=256 EOFBearbeiten Sie die generierte
setup.env-Datei, indem Sie alle hervorgehobenen Parameterwerte durch Parameterwerte ersetzen, die am besten zu Ihrer Umgebungseinrichtung passen.Optional: Testen Sie den Modus mit teilweisem Cache (~30%), indem Sie in der Datei
setup.envden WertNUM_WAREHOUSEin3200ändern. Weitere Informationen finden Sie unter Szenarien für die Leistungsbewertung.Optional: Testen Sie den vollständig (100%) im Cache gespeicherten Modus, indem Sie in der
setup.env fileNUM_WAREHOUSEin576ändern. Weitere Informationen finden Sie unter Szenarien für die Leistungsbewertung.
TPC-C-Daten in die Datenbank laden
Ein Ladeschritt bezieht sich auf den Vorgang, bei dem die Benchmark-Datenbank mit ersten Daten gefüllt wird, bevor der Leistungstest ausgeführt wird.
Während des Ladeschritts wird die Datenbank gemäß den TPC-C-Spezifikationen mit einer bestimmten Anzahl von Lagern, Kunden und anderen Entitäten gefüllt. Der Zweck des Lastschritts besteht darin, eine realistische Arbeitslast für den Leistungstest zu erstellen und dafür zu sorgen, dass die Testergebnisse über verschiedene Systeme hinweg vergleichbar sind.
Nach Abschluss des Ladeschritts befindet sich die Datenbank in einem konsistenten Zustand mit einem definierten Satz von Anfangsdaten, die für den TPC-C-Benchmarktest verwendet werden können.
So laden Sie die TPC-C-Datenbank:
Wechseln Sie mit dem folgenden Befehl in das Benchmark-Basisverzeichnis:
cd hammerdb/HammerDB-4.6Kopieren Sie den folgenden Inhalt und fügen Sie ihn in
build-tpcc.shein:#!/bin/bash -x source ./setup.env # create role tpcc with superuser login as 'postgres' and password as 'AlloyDB#123'; # ----------------------------------------------------- ./hammerdbcli << EOF # CONFIGURE PARAMETERS FOR TPCC BENCHMARK # -------------------------------------- dbset db pg dbset bm tpc-c # CONFIGURE POSTGRES HOST AND PORT # -------------------------------------- diset connection pg_host $PGHOST diset connection pg_port $PGPORT # CONFIGURE TPCC # -------------------------------------- diset tpcc pg_superuser postgres diset tpcc pg_superuserpass AlloyDB#123 diset tpcc pg_user tpcc diset tpcc pg_pass AlloyDB#123 diset tpcc pg_dbase tpcc # SET NUMBER OF WAREHOUSES AND USERS TO MANAGE EACH WAREHOUSE # THIS IMPORTANT METRIC ESTABLISHES THE DATABASE SCALE/SIZE # -------------------------------------- diset tpcc pg_count_ware $NUM_WAREHOUSE diset tpcc pg_num_vu 10 # LOG OUTPUT AND CONFIGURATION DETAILS # -------------------------------------- vuset logtotemp 1 print dict # CREATE AND POPULATE DATABASE SCHEMA # -------------------------------------- buildschema waittocomplete vudestroy quit EOFFühren Sie den folgenden Ladebefehl aus und warten Sie, bis der Befehl abgeschlossen ist.
chmod +x ./build-tpcc.sh mkdir results sudo nohup ./build-tpcc.sh > results/build-tpcc.out 2>&1Validieren Sie den Ladevorgang. Nachdem das vorherige Skript abgeschlossen ist, sollten Sie prüfen, ob das Laden der Datenbank erfolgreich war. Führen Sie den folgenden Befehl aus, um die Datenbankgröße zu prüfen:
psql -h $PGHOST -p 5432 -U postgres postgres=> \l+ tpcc List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description --------------+------------------+----------+---------+---------+---------------------------------------+---------+------------+-------------------------------------------- tpcc | tpcc | UTF8 | C.UTF-8 | C.UTF-8 | | --- GB | pg_default | | | | | | | 160.000 | | (1 row)
In einer TPC-C-Konfiguration mit 30% Cache (mit 3.200 Warehouses) beträgt die Größe der tpcc-Datenbank etwa 300 GB.
In einer zu 100% im Cache gespeicherten TPC-C-Konfiguration (mit 576 Warehouses) beträgt die Größe der tpcc-Datenbank etwa 55 GB.
TPC-C-Benchmark ausführen
Sie können jetzt den TPC-C-Leistungstest ausführen. Der TPC-C-Benchmark wird mit der gefüllten Datenbank aus dem Ladeschritt ausgeführt. Der Benchmark generiert eine Reihe von Transaktionen, die eine typische Geschäftsumgebung simulieren, einschließlich Auftragserfassung, Zahlungsabwicklung und Inventarverwaltung. Die Arbeitslast wird in Transaktionen pro Minute (TPM) gemessen. Dies entspricht der Anzahl der vollständigen Geschäftstransaktionen, die das System in einer Minute verarbeiten kann.
Der Ausführungsschritt ist so konzipiert, dass das Datenbanksystem unter realistischen Bedingungen belastet wird und eine standardisierte Methode zur Leistungsmessung bereitgestellt wird, die Sie über verschiedene Datenbanksysteme hinweg vergleichen können. Anbieter und Nutzer verwenden die Ergebnisse des TPC-C-Benchmarks häufig, um die Leistung verschiedener Datenbanksysteme und Hardwarekonfigurationen zu bewerten.
So führen Sie den TPC-C-Benchmark aus:
Wechseln Sie zum Benchmark-Basisverzeichnis:
cd hammerdb/HammerDB-4.6Kopieren Sie den folgenden Inhalt und fügen Sie ihn in
run-tpcc.shein:#!/bin/bash -x source ./setup.env ./hammerdbcli << EOF dbset db pg dbset bm tpc-c # CONFIGURE PG HOST and PORT # ------------------------- diset connection pg_host $PGHOST diset connection pg_port $PGPORT # CONFIGURE TPCC DB # ------------------------- diset tpcc pg_superuser postgres diset tpcc pg_superuserpass AlloyDB#123 diset tpcc pg_user postgres diset tpcc pg_pass AlloyDB#123 diset tpcc pg_dbase tpcc # BENCHMARKING PARAMETERS # ------------------------- diset tpcc pg_driver timed diset tpcc pg_rampup 10 diset tpcc pg_duration 60 diset tpcc pg_vacuum false diset tpcc pg_partition false diset tpcc pg_allwarehouse true diset tpcc pg_timeprofile true diset tpcc pg_connect_pool false diset tpcc pg_dritasnap false diset tpcc pg_count_ware $NUM_WAREHOUSE diset tpcc pg_num_vu 1 loadscript print dict vuset logtotemp 1 vuset vu $NUM_USERS vucreate vurun waittocomplete quit EOFFühren Sie das Skript mit den folgenden Befehlen aus:
chmod +x run-tpcc.sh mkdir results sudo nohup ./run-tpcc.sh > results/run-tpcc.out 2>&1Warten Sie, bis das Skript
run-tpcc.shabgeschlossen ist. Die Ausführung des Skripts dauert etwa 1 Stunde und 10 Minuten. Nachdem das Script abgeschlossen ist, können Sie die Ergebnisse analysieren.
Benchmark-Ergebnisse analysieren
Beim TPC-C-Benchmarking sind „Neue Bestellungen pro Minute“ (NOPM) und „Transaktionen pro Minute“ (TPM) Leistungsmesswerte, mit denen die Leistung eines Datenbanksystems gemessen wird.
NOPM: Misst die Anzahl der neuen Bestelltransaktionen, die das System in einer Minute verarbeiten kann. Die Transaktion „Neue Bestellung“ ist eine der wichtigsten Transaktionen im TPC-C-Benchmark und umfasst das Erstellen einer neuen Bestellung für einen Kunden.
TPM: Misst die Gesamtzahl der abgeschlossenen Geschäftstransaktionen, die das System in einer Minute verarbeiten kann. Zu den Transaktionen gehören neue Bestelltransaktionen sowie andere im TPC-C-Benchmark definierte Transaktionstypen, z. B. Zahlung, Lieferung und Bestellstatus.
TPM ist der primäre Leistungsmesswert für den TPC-C-Benchmark, da er ein Gesamtmaß für die Fähigkeit des Systems bietet, eine realistische Arbeitslast zu bewältigen. NOPM kann ein nützlicher Messwert für Systeme sein, die sich auf die Verarbeitung neuer Bestellungen konzentrieren, z. B. E-Commerce- oder Einzelhandelssysteme.
Ergebnisse mit 30% im Cache gespeicherter TPC-C-Datenbank auf einer Maschine mit 16 vCPUs ansehen
Verwenden Sie den folgenden Befehl, um die Leistungswerte für dieses Szenario zu extrahieren:
grep NOPM results/run-tpcc.outDie erwartete Ausgabe sieht so aus:
Vuser 1:TEST RESULT : System achieved 252970 NOPM from 582385 PostgreSQL TPM
Mit einer zu 30% im Cache gespeicherten TPC-C-Datenbank auf einer Maschine mit 16 vCPUs (mit NUM_WAREHOUSE=3200 und NUM_USERS=256) werden 252.970 tpm-C (New Order Per Minute) von insgesamt 582.385 AlloyDB-TPM beobachtet.
Ergebnisse mit einer zu 100% im Cache gespeicherten TPC-C-Datenbank auf einer Maschine mit 16 vCPUs ansehen
In einer zu 100% im Cache gespeicherten TPC-C-Datenbank auf einer Maschine mit 16 vCPUs (mit NUM_WAREHOUSE=576 und NUM_USERS=256) werden 428.316 tpm-C (New Order Per Minute) von insgesamt 974.264 AlloyDB-TPM beobachtet.
Verwenden Sie den folgenden Befehl, um die Leistungswerte für dieses Szenario zu extrahieren:
grep NOPM results/tpcc-run.outDie erwartete Ausgabe sieht so aus:
Vuser 1:TEST RESULT : System achieved 428316 NOPM from 974264 PostgreSQL TPM
Zusammenfassung der Leistungsergebnisse auf einer Maschine mit 16 vCPUs
In der folgenden Tabelle sind die Benchmark-Leistungsergebnisse für eine Maschine mit 16 vCPUs zusammengefasst:
| TPC-C-Szenario | NUM_WAREHOUSE | NUM_USERS | NOPM | Kumulativer TPM |
|---|---|---|---|---|
| 30% im Cache gespeichert | 3200 | 256 | 252.970 | 582.385 |
| 100% im Cache gespeichert | 576 | 256 | 428.316 | 974.264 |
Leistungsmesswerte der Datenbank beobachten
Wenn Sie das Verhalten Ihres Datenbanksystems besser verstehen möchten, können Sie mit den AlloyDB-Monitoring-Tools wichtige Systemmesswerte wie CPU-Auslastung, Arbeitsspeichernutzung und Transaktionen pro Sekunde beobachten. Weitere Informationen finden Sie unter Instanzleistung überwachen.
Nachdem Sie diesen Benchmark ausgeführt haben, können Sie beispielsweise auf der AlloyDB-Seite Übersicht in der Google Cloud Console sehen, dass die durchschnittliche CPU-Auslastung für die zu 100% im Cache gespeicherte TPC-C-Ausführung fast 90 % beträgt.
TPC-C-Benchmark auf einer AlloyDB-Instanz mit 64 vCPUs ausführen
Wenn Sie einen TPC-C-Benchmark auf einer AlloyDB-Instanz mit 64 vCPUs ausführen möchten, folgen Sie denselben Einrichtungsschritten wie unter TPC-C-Benchmark ausführen, verwenden aber andere Maschinentypen.
AlloyDB und den Clientcomputer einrichten
Erstellen Sie einen AlloyDB-Cluster und eine AlloyDB-Instanz und ersetzen Sie
64 vCPU, 512GBals Maschinentyp.Stellen Sie den Clientcomputer bereit und ersetzen Sie den Maschinentyp durch
n2-standard-64.
Benchmark ausführen
Wenn Sie mehrere Benchmarks nacheinander ausführen, führen Sie eine Benchmark-Bereinigung durch.
Richten Sie den Clientcomputer ein und ersetzen Sie dabei die folgenden Werte:
- Legen Sie für
PGHOSTdie private IP-Adresse Ihrer neuen AlloyDB-Instanz mit 64 vCPUs fest. - Legen Sie für das Szenario „30% im Cache gespeicherte TPC-C“ die Werte
NUM_WAREHOUSE=12800undNUM_USERS=1024fest. - Legen Sie für das Szenario „100% im Cache gespeicherte TPC-C“ die Werte
NUM_WAREHOUSE=2304undNUM_USERS=1024fest.
- Legen Sie für
TPC-C-Datenbank einrichten und laden Wenn Sie den Ladevorgang beschleunigen möchten, ändern Sie den Wert von
pg_num_vuinbuild-tpcc.shin 64 alsdiset tpcc pg_num_vu 64.
Benchmark-Ergebnisse analysieren
In der folgenden Tabelle sind die Benchmark-Leistungsergebnisse auf einer Maschine mit 64 vCPUs zusammengefasst:
| Benchmark-Modus | NUM_WAREHOUSE | NUM_USERS | NOPM | Kumulativer TPM |
|---|---|---|---|---|
| 30% im Cache gespeichert | 12800 | 1.024 | 589.598 | 1.371.160 |
| 100% im Cache gespeichert | 2304 | 1.024 | 716.138 | 1.665.438 |
pgbench-TPC-B-Benchmark ausführen
TPC-B (Transaction Processing Performance Council Benchmark B) ist einer der Benchmark-Modi, die in pgbench, einem Benchmarking-Tool für PostgreSQL, verfügbar sind. TPC-B simuliert ein Bankenszenario, in dem mehrere Kassierer Transaktionen auf Kundenkonten ausführen. Die Arbeitslast besteht aus den folgenden Transaktionstypen:
- Einzahlungen
- Abbuchungen
- Kontostandabfragen
Der Benchmark misst die Leistung des Datenbanksystems, indem er eine Mischung dieser Transaktionen simuliert und die Anzahl der Transaktionen pro Sekunde misst, die das System verarbeiten kann.
Der TPC-B-Modus in pgbench generiert eine synthetische Datenbank und simuliert eine Mischung aus Transaktionen, die der TPC-B-Arbeitslast ähnelt, aber nicht offiziell von der TPC-Organisation zertifiziert ist. Der TPC-B-Modus in pgbench bietet zwar eine nützliche Annäherung an die TPC-B-Leistung, sollte aber nicht verwendet werden, um die Einhaltung von TPC-B-Standards zu beanspruchen.
Szenarien zur Leistungsmessung
In diesem Abschnitt wird beschrieben, wie Sie die TPC-B-Leistung in den folgenden kritischen Modi messen. Der einzige Parameter, der sich in diesen Modi unterscheidet, ist der Wert des Parameters SCALE_FACTOR.
Szenario mit teilweise im Cache gespeicherter Datenbank
In diesem Szenario richten Sie eine große Datenbank (ca. 650 GB) mit --scale= 50000 ein und initialisieren sie. Eine große Datenbank, die nicht in den Arbeitsspeicher passt und erhebliche Laufwerk-E/A-Vorgänge verursacht, bietet eine realistische Darstellung vieler Produktionsarbeitslasten.
Eine große Datenbank, die erhebliche Laufwerk-E/A verursacht, kann die Bedeutung des Datenbankdesigns und der Abfrageoptimierung unterstreichen. Eine große Datenbank kann auch Leistungsprobleme im Zusammenhang mit Laufwerk-E/A aufdecken, z. B. langsamer Laufwerkzugriff oder ineffiziente Abfragen, die in einer kleinen oder vollständig speicherresidenten Datenbank möglicherweise nicht offensichtlich sind.
Szenario mit vollständig im Cache gespeicherter Datenbank
In diesem Szenario richten Sie eine Datenbank mit einer Größe von etwa 60 GB ein und initialisieren sie mit --scale=4000, sodass sie sich im Pufferpool befindet. Das Benchmarking einer speicherresidenten Datenbank ist wichtig, da Sie damit die maximale Leistung des Datenbanksystems in einer kontrollierten Umgebung bewerten können.
Eine speicherresidente Datenbank speichert alle Daten im PostgreSQL-Zwischenspeicherpool. Dadurch wird der E/A-Engpass vermieden, der beim Zugriff auf Daten von der Festplatte auftreten kann. In diesem Modus können Sie Leistungsengpässe identifizieren, die nicht mit E/A zusammenhängen, z. B. CPU-Auslastung oder Sperrprobleme, die beim Benchmarking einer Datenbank, die auf Laufwerk-E/A basiert, möglicherweise nicht offensichtlich sind.
Datenbankserver und Clientcomputer einrichten
So richten Sie die Infrastruktur für die Ausführung eines pgbench-TPC-B-Benchmarks ein:
Erstellen Sie einen AlloyDB-Cluster und eine AlloyDB-Instanz und ersetzen Sie
16 vCPU, 128GBals Maschinentyp.Stellen Sie die Clientmaschine bereit und ersetzen Sie
E2-standard-16 (minimum)als Maschinentyp.
pgbench-TPC-B-Benchmark ausführen
Stellen Sie mit dem folgenden Google Cloud CLI-Befehl eine Verbindung zum Clientcomputer her:
gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"Erstellen Sie die Datei
pgbench-setup.env.$ cat << EOF > pgbench-setup.env # Private IP of the AlloyDB primary instance export PGHOST=<private_ip> # Set PGUSER to postgres as a default user. export PGUSER=postgres # Password set for PGUSER export PGPASSWORD=<your pg password> # In pgbench, the scale factor represents the size of the test database. # and is defined as the number of 1 MB-sized data pages to be generated per client. export SCALE_FACTOR=<scale_factor> # Number of clients to drive the benchmark in throughput mode export NUM_CLIENTS=<num_clients> EOFBearbeiten Sie die generierte Datei
setup.envund ersetzen Sie die folgenden Parameterwerte durch Werte, die für Ihre Umgebungseinrichtung geeignet sind.- PRIVATE_IP: die private IP-Adresse Ihrer AlloyDB-Instanz.
Wählen Sie anhand der folgenden Tabelle die Werte für
<scale_factor>und<num_clients>aus. Diese Werte müssen mit dem Maschinentyp und der Datenbankgröße (vollständig oder teilweise im Cache gespeichert) skaliert werden. In den Beispielen in diesem Leitfaden werden die WerteSCALE_FACTORundNUM_CLIENTverwendet, die dem Maschinentypn2-highmem-16entsprechen.Vollständig im Cache gespeichert Teilweise im Cache Maschinentyp SCALE_FACTOR NUM_CLIENTS SCALE_FACTOR NUM_CLIENTS n2-highmem-2 500 48 6250 32 n2-highmem-4 1000 96 12500 64 n2-highmem-8 2000 192 25.000 128 n2-highmem-16 4000 384 50.000 256 n2-highmem-32 8000 768 100000 512 n2-highmem-64 16.000 1.536 200000 1.024 Erstellen Sie eine
pgbench-Datenbank.source ./pgbench-setup.env psql -h $PGHOST -p 5432 postgres=> create database pgbench; CREATE DATABASEInitialisieren und laden Sie die pgbench-Datenbank mit den folgenden Befehlen. In diesem Schritt wird das Benchmarking-Dataset erstellt und mit realistischen Daten gefüllt, sodass Sie eine TPC-B-Arbeitslast in der pgbench-Datenbank genau simulieren können.
source ./pgbench-setup.env sudo nohup pgbench -i --host=$PGHOST --scale=$SCALE_FACTOR pgbench > /tmp/pgbench-tpcb-partially-cached-db-init.out 2>&1Erwartete Ladezeiten:
- Das Laden der teilweise im Cache gespeicherten Datenbank dauert etwa 6 Stunden.
- Das Laden der vollständig im Cache gespeicherten Datenbank dauert etwa 45 Minuten.
Optional: Führen Sie eine Prüfung der Ladegenauigkeit durch. Der Inhalt der Datei
/tmp/pgbench-tpcb-partially-cached-db-init.outsollte in etwa so aussehen:generating data (client-side)... 100000 of 400000000 tuples (0%) done (elapsed 0.02 s, remaining 99.82 s) .. .. .. .. .. .. 399800000 of 400000000 tuples (99%) done (elapsed 534.60 s, remaining 0.27 s) 399900000 of 400000000 tuples (99%) done (elapsed 534.72 s, remaining 0.13 s) 400000000 of 400000000 tuples (100%) done (elapsed 534.85 s, remaining 0.00 s) vacuuming... creating primary keys... done in 1481.92 s (drop tables 0.01 s, create tables 0.04 s, client-side generate 540.93 s, vacuum 615.11 s, primary keys 325.84 s).Optional: Wenn Sie die Genauigkeit der Last weiter prüfen möchten, führen Sie den folgenden PostgreSQL-Befehl aus, um die Größe aller pgbench-Tabellen zu messen:
Stellen Sie eine Verbindung zur pgbench-Datenbank her:
source ./pgbench-setup.env psql -h $PGHOST -p 5432 -U postgres -d pgbenchFühren Sie den folgenden SQL-Befehl aus:
pgbench=> SELECT nspname AS schema_name, relname AS table_name, pg_size_pretty(pg_total_relation_size(C.oid)) AS size FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema' ORDER BY pg_total_relation_size(C.oid) DESC;Vergleichen Sie die Ausgabe des vorherigen Befehls mit der Ausgabe, die Sie für die Ausführung der teilweise im Cache gespeicherten Datenbank (
SCALE_FACTOR=50000) erhalten haben.schema_name | table_name | size -------------+-------------------------------------------+--------- public | pgbench_accounts | 731 GB public | pgbench_accounts_pkey | 105 GB public | pgbench_tellers | 32 MB public | pgbench_tellers_pkey | 11 MB public | pgbench_branches | 2952 kB public | pgbench_branches_pkey | 1112 kB .. .. .. public | pgbench_history | 0 bytes .. .. .. (29 rows)
Führen Sie die folgenden Befehle aus, um eine Arbeitslast für ein Finanzbuchhaltungssystem zu simulieren. Dazu wird eine Reihe von Transaktionen mit Einzahlungen, Überweisungen und Zahlungen ausgeführt, mit denen Sie die Datenbankleistung bei hoher Arbeitslast messen können.
source ./pgbench-setup.env mkdir -p ~/results/alloydb/pgbench sudo nohup pgbench --host=$PGHOST --builtin=tpcb-like --time=3900 --jobs=$NUM_CLIENTS --client=$NUM_CLIENTS --scale=$SCALE_FACTOR --protocol=prepared --progress=1 pgbench > ~/results/alloydb/pgbench/pgbench.run.out 2>&1
Benchmark-Ergebnisse analysieren
Prüfen Sie die Ausgabe des vorherigen Befehls in der Datei ~/results/alloydb/pgbench/pgbench.run.out. Die TPS-Anzahl sollte nahe an den Zahlen liegen, die in den Szenarien mit vollständig im Cache gespeicherter Datenbank und teilweise im Cache gespeicherter Datenbank angezeigt werden.
Ergebnisse mit einer vollständig im Cache gespeicherten Datenbank
Die Ausgabe des letzten Befehls in pgbench-TPC-B-Benchmark ausführen sollte in etwa so aussehen, wobei --scale=4000:
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 4000
query mode: prepared
number of clients: 384
number of threads: 384
duration: 3900 s
number of transactions actually processed: 84819501
latency average = 17.654 ms
latency stddev = 6.963 ms
tps = 21747.831164 (including connections establishing)
tps = 21750.579718 (excluding connections establishing)
Wenn Sie das Verhalten des Datenbanksystems besser verstehen möchten, können Sie Systemmesswerte wie CPU-Auslastung, Arbeitsspeichernutzung und Transaktionen pro Sekunde in der Google Cloud Console überwachen. Weitere Informationen finden Sie unter Instanzen überwachen.
Ergebnisse mit einer teilweise im Cache gespeicherten Datenbank
Die Ausgabe des letzten Befehls in pgbench-TPC-B-Benchmark ausführen sollte in etwa so aussehen, wobei --scale=50000:
pgbench: warning: scale option ignored, using count from pgbench_branches table (50000)
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 50000
query mode: prepared
number of clients: 384
number of threads: 384
duration: 3900 s
number of transactions actually processed: 68073405
latency average = 21.992 ms
latency stddev = 29.272 ms
tps = 17453.913041 (including connections establishing)
tps = 17460.373303 (excluding connections establishing)
Zusammenfassung der Leistungsergebnisse für einen pgbench TPC-B-Benchmark
In der folgenden Tabelle sind die Leistungsergebnisse für einen pgbench TPC-B-Benchmark zusammengefasst:
| TPC-B-Szenario | SCALE_FACTOR | TPS | CPU-Auslastung (%) |
|---|---|---|---|
| Teilweise im Cache gespeichert | 50.000 | 17.460 | 96 % |
| Vollständig im Cache gespeichert | 4000 | 21.750 | 94 % |
Benchmark „Nur Indexeinfügung“ ausführen
Der Benchmark „Index Insert Only“ ist ein Szenario mit hoher Gleichzeitigkeit und Schreibintensität, das in diesem Abschnitt angepasst wird, um die Leistungsvorteile von AlloyDB für die meisten OLTP-Anwendungen zu veranschaulichen. Zum Ausführen dieses Benchmarks erstellen Sie mehrere Indexe für die Tabelle pgbench_history und führen dann wiederholt INSERT-Vorgänge für die Tabelle pgbench_history über mehrere Clientverbindungen aus.
Benchmarks für „Nur Index einfügen“ messen die Leistung beim Einfügen von Daten in eine Datenbanktabelle, wobei der Schwerpunkt auf den Auswirkungen von Indexen auf den Schreibvorgang liegt. Mit diesem Benchmark können Sie nachvollziehen, wie schnell neue Zeilen einer Tabelle mit und ohne Indexe hinzugefügt werden können. Außerdem wird die potenzielle Verlangsamung durch die Indexwartung während des Einfügens hervorgehoben.
AlloyDB verbessert die Schreibleistung von PostgreSQL, was auch die OLTP-Arbeitslasten verbessert. Um die Leistung von schreibintensiven OLTP-Szenarien zu verbessern, bietet AlloyDB Architekturinnovationen, darunter eine abgestufte Cache-Ebene für Lesevorgänge und eine verteilte und hochskalierbare Speicher-Engine-Technologie für Schreibvorgänge.
AlloyDB und den Clientcomputer einrichten
So richten Sie die Infrastruktur für die Ausführung eines Index Only Insert-Benchmarks ein:
Erstellen Sie einen AlloyDB-Cluster und eine AlloyDB-Instanz und ersetzen Sie
16 vCPU and 128 GB RAMals Maschinentyp.Stellen Sie die Clientmaschine bereit und ersetzen Sie
E2-standard-16 (minimum)als Maschinentyp.
Benchmark „Nur Indexeinfügung“ ausführen
Stellen Sie mit dem folgenden Beispielbefehl eine Verbindung zum Clientcomputer her:
gcloud compute ssh --zone "<primary zone>" "<client machine name>" --project "<google-project>"Richten Sie die Umgebung mit dem folgenden Befehl ein:
export PGHOST=<private_ip>Erstellen Sie eine
pgbench-Datenbank anhand des folgenden Beispiels. Wenn die Datenbank bereits vorhanden ist, löschen Sie sie und erstellen Sie sie neu.psql -h $PGHOST -p 5432 -U postgres -c "DROP DATABASE IF EXISTS pgbench" psql -h $PGHOST -p 5432 -U postgres -c "CREATE DATABASE pgbench"Initialisieren und laden Sie die pgbench-Datenbank, um sicherzustellen, dass das Benchmarking-Dataset erstellt und mit realistischen Daten gefüllt wird. Bearbeiten Sie die hervorgehobenen Parameter und führen Sie dann den folgenden Befehl aus:
sudo nohup pgbench -i --host=$PGHOST --user=postgres --scale=25000 pgbench > /tmp/pgbench-index-insert-only-init.out 2>&1 ... postgres=> create database pgbench; CREATE DATABASE pgbenchPrüfen Sie, ob die Ausgabe des vorherigen Befehls in etwa so aussieht:
dropping old tables... creating tables... generating data (client-side)... 100000 of 2500000000 tuples (0%) done (elapsed 0.03 s, remaining 636.43 s) 200000 of 2500000000 tuples (0%) done (elapsed 0.05 s, remaining 649.12 s) .. .. .. .. .. .. 2499900000 of 2500000000 tuples (99%) done (elapsed 3425.42 s, remaining 0.14 s) 2500000000 of 2500000000 tuples (100%) done (elapsed 3425.57 s, remaining 0.00 s) vacuuming... creating primary keys... done in 12851.19 s (drop tables 998.62 s, create tables 0.02 s, client-side generate 3460.33 s, vacuum 5299.93 s, primary keys 3092.29 s).Erstellen Sie das Script
index-init.sqlmit den folgenden Befehlen:cat > index-init.sql << EOF CREATE INDEX tid ON pgbench_history(tid); CREATE INDEX bid ON pgbench_history(bid); CREATE INDEX aid ON pgbench_history(aid); CREATE INDEX delta ON pgbench_history(delta); CREATE INDEX mtime ON pgbench_history(mtime); EOFFühren Sie das
index-init.sql-Skript aus:psql -h $PGHOST -U postgres -d pgbench -f ./index-init.sql Password for user postgres: CREATE INDEXOptional: Datenbank-Schema und anfänglichen Ladevorgang validieren:
psql -h $PGHOST -U postgres -d pgbench pgbench=> \dt List of relations Schema | Name | Type | Owner --------+------------------+-------+---------- public | pgbench_accounts | table | postgres public | pgbench_branches | table | postgres public | pgbench_history | table | postgres public | pgbench_tellers | table | postgres (4 rows) pgbench=> \di List of relations Schema | Name | Type | Owner | Table --------+-----------------------+-------+----------+------------------ public | aid | index | postgres | pgbench_history public | bid | index | postgres | pgbench_history public | delta | index | postgres | pgbench_history public | mtime | index | postgres | pgbench_history public | pgbench_accounts_pkey | index | postgres | pgbench_accounts public | pgbench_branches_pkey | index | postgres | pgbench_branches public | pgbench_tellers_pkey | index | postgres | pgbench_tellers public | tid | index | postgres | pgbench_history (8 rows)Nach dem Laden wird die Datenbankgröße voraussichtlich etwa 365 GB betragen:
pgbench=> \l+ pgbench List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description --------------+------------------+----------+---------+---------+---------------------------------------+--------+------------+-------------------------------------------- ... pgbench | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | 365 GB | pg_default | ...Erstellen Sie das Script
index-inserts-only.sqlmit den folgenden Befehlen:cat > index-inserts-only.sql << EOF \set aid random(1, 1000000000) \set bid random(1, 1000000000) \set tid random(1, 1000000000) \set delta random(-500000000, 500000000) BEGIN; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; EOFFühren Sie den pgbench-Benchmark mit dem folgenden Befehl aus:
sudo nohup pgbench --host=$PGHOST --user=postgres --time=3900 --client=256 --jobs=256 --scale=25000 --progress=1 --file=./index-inserts-only.sql pgbench > /tmp/pgbench-index-insert-only-run.out 2>&1
Benchmark-Ergebnisse analysieren
Prüfen Sie die Ausgabe des vorherigen Befehls in der Datei /tmp/pgbench-index-insert-only-run.out. Während dieses Benchmarktests sollten Sie etwa 52.000 Transaktionen pro Sekunde und eine CPU-Auslastung von etwa 88% sehen, wie in der folgenden Beispielausgabe dargestellt.
scaling factor: 25000
query mode: simple
number of clients: 256
number of threads: 256
duration: 3900 s
number of transactions actually processed: 201785196
latency average = 4.947 ms
latency stddev = 3.488 ms
tps = 51738.604613 (including connections establishing)
tps = 51742.459757 (excluding connections establishing)
Benchmark „Nur auswählen“ auf einer Instanz mit 64 vCPUs ausführen
pgbench unterstützt ein integriertes, schreibgeschütztes Szenario, in dem SELECT-Abfragen von mehreren Clientverbindungen wiederholt für eine bestimmte Datenbank ausgeführt werden. Mit diesem Benchmark wird die Leseleistung der Datenbank gemessen, ohne dass der Aufwand für Datenänderungsvorgänge wie INSERT, UPDATE oder DELETE anfällt. Diese SELECT-Abfragen sind Punktabfragen, die die schnellste und effizienteste Art von SELECT-Abfragen sind, da sie nur auf eine einzelne Datenzeile direkt aus den Indexstrukturen zugreifen.
Mit einem Benchmark nur für die Auswahl können Sie Folgendes erreichen:
Maximalen Durchsatz erreichen: Da Punktabfragen für einen Index die effizienteste Form von Abfragen in einem Datenbanksystem sind, können Sie den maximal möglichen Durchsatz messen, den AlloyDB erreichen kann.
Skalierbarkeit: Wählen Sie nur Benchmarks aus, mit denen Sie die Skalierbarkeit von AlloyDB von 2 vCPUs bis zur maximalen vCPU-Konfiguration testen können, die von AlloyDB angeboten wird.
AlloyDB und den Clientcomputer einrichten
Richten Sie AlloyDB und den Clientcomputer auf einem Maschinentyp mit 64 vCPUs ein.
Benchmark „Nur auswählen“ ausführen
Stellen Sie mit dem folgenden Beispielbefehl eine Verbindung zum Clientcomputer her:
gcloud compute ssh --zone "PRIMARY_ZONE" "CLIENT_MACHINE_NAME" --project "GOOGLE_PROJECT"Richten Sie die Umgebung mit dem folgenden Befehl ein:
export PGHOST=<private_ip>Erstellen Sie die pgbench-Datenbank anhand des folgenden Beispiels:
psql -h $PGHOST -p 5432 -U postgres postgres=> create database pgbench; CREATE DATABASEInitialisieren Sie die pgbench-Datenbank. Mit dem folgenden Befehl wird die pgbench-Datenbank mit etwa 220 GB realistischen Daten initialisiert. Sie verwenden
--scale=15000für den vollständig im Cache gespeicherten Benchmark „Nur auswählen“.Führen Sie dazu diesen Befehl aus:
sudo nohup pgbench -i --host=$PGHOST --user=postgres --scale=15000 pgbench > /tmp/pgbench-select-only-init.out 2>&1Prüfen Sie, ob die Ausgabe des vorherigen Befehls in etwa so aussieht:
cat /tmp/pgbench-select-only-init.out nohup: ignoring input dropping old tables... creating tables... generating data (client-side)... 100000 of 1500000000 tuples (0%) done (elapsed 0.01 s, remaining 161.60 s) 200000 of 1500000000 tuples (0%) done (elapsed 0.03 s, remaining 224.35 s) 300000 of 1500000000 tuples (0%) done (elapsed 0.09 s, remaining 448.97 s) .. .. .. .. .. .. 1499900000 of 1500000000 tuples (99%) done (elapsed 1251.03 s, remaining 0.08 s) 1500000000 of 1500000000 tuples (100%) done (elapsed 1251.10 s, remaining 0.00 s) vacuuming... creating primary keys... done in 2204.62 s (drop tables 2.29 s, create tables 0.01 s, client-side generate 1271.82 s, vacuum 427.83 s, primary keys 502.66 s).Führen Sie pgbench aus. Dieser letzte Benchmarking-Schritt dauert über eine Stunde.
sudo nohup pgbench --host=$PGHOST --user=postgres --builtin=select-only --time=3900 --jobs=256 --client=256 --scale=15000 --protocol=simple --progress=1 pgbench > /tmp/pgbench-select-only-run.out 2>&1Prüfen Sie nach Abschluss des Benchmarks die Datei
/tmp/pgbench-select-only-run.outauf die endgültigen Ergebnisse.
Benchmark-Ergebnisse analysieren
Während dieses Benchmarktests sollten Sie etwa 467.000 Transaktionen pro Sekunde und eine CPU-Auslastung von etwa 95% beobachten, wie in der folgenden Beispielausgabe gezeigt.
cat /tmp/pgbench-select-only-run.out
transaction type: <builtin: select only>
scaling factor: 15000
query mode: simple
number of clients: 256
number of threads: 256
duration: 3900 s
number of transactions actually processed: 1823506174
latency average = 0.547 ms
latency stddev = 0.267 ms
tps = 467563.144333 (including connections establishing)
tps = 467583.398400 (excluding connections establishing)
Zusammenfassung der AlloyDB-Benchmark-Ergebnisse
In den folgenden Tabellen sind die AlloyDB-Benchmark-Ergebnisse zusammengefasst, die auf den in diesem Dokument durchgeführten Tests basieren.
HammerDB TPC-C-Leistungsübersicht
| AlloyDB-Maschinentyp | TPC-C-Arbeitslastszenario | NUM_WAREHOUSE | NUM_USERS | New Orders Per Minute (NOPM) | Kumulativer TPM | In TPS umgewandelt |
|---|---|---|---|---|---|---|
| 16 vCPUs | 30% im Cache gespeichert | 3200 | 256 | 252.970 | 582.385 | 9.706 |
| 16 vCPUs | 100% im Cache gespeichert | 576 | 256 | 428.316 | 974.264 | 16.238 |
| 64 vCPUs | 30% im Cache gespeichert | 12800 | 1.024 | 589.598 | 1.371.160 | 22.853 |
| 64 vCPUs | 100% im Cache gespeichert | 2304 | 1.024 | 716.138 | 1.665.438 | 27.757 |
pgbench-Leistungsübersicht
| AlloyDB-Maschinentyp | pgbench-Arbeitslast-Szenario | Skalierungsfaktor | TPS | CPU % |
|---|---|---|---|---|
| 16 vCPUs | TPC-B-ähnlich, vollständig im Cache gespeichert | 4000 | 20.359 | 96 % |
| 16 vCPUs | TPC-B-ähnlich, teilweise im Cache gespeichert | 50.000 | 14.060 | 94 % |
| 16 vCPUs | Nur Indexeinfügungen | 25.000 | 51.742 | 88 % |
| 64 vCPUs | Max. Durchsatz (nur Auswahl) | 15000 | 467.583 | 95 % |
OLTP-Benchmarking in Cloud SQL for PostgreSQL ausführen
Sie können die entsprechende OLTP-Leistung in PostgreSQL in Cloud SQL for PostgreSQL auf einem Maschinentyp mit 16 vCPUs für eine vergleichende Analyse testen. In diesem Abschnitt wird beschrieben, wie Sie eine Cloud SQL for PostgreSQL-Instanz (oder einen beliebigen PostgreSQL-Server, der auf der Infrastruktur Ihrer Wahl bereitgestellt wird) einrichten, die mit der AlloyDB-Einrichtung vergleichbar ist, die in diesem Leitfaden zum Benchmarking der OLTP-Leistung verwendet wird. In diesem Szenario wird die 16vCPU-SKU ausgewählt, die Hochverfügbarkeit (HA) aktiviert und der Speicher vorkonfiguriert.
Hinweis
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the AlloyDB, Compute Engine, and Resource Manager APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Achten Sie darauf, dass Sie für Ihr Nutzerkonto die Rollen "Cloud SQL-Administrator" und "Compute-Betrachter" haben.
Cloud SQL for PostgreSQL-Instanz bereitstellen
Erstellen Sie eine PostgreSQL-Instanz und ersetzen Sie die folgenden Werte:
- Datenbankversion: PostgreSQL 14
- Wählen Sie zuerst eine Konfiguration aus: Produktion
- Region und zonale Verfügbarkeit auswählen: Wählen Sie
us-central1als Region aus. - Zonale Verfügbarkeit: Mehrere Zonen (Hochverfügbarkeit)
- Primäre Zone:
us-central1-c - Sekundäre Zone:
us-central-1-f
- Primäre Zone:
- Maschinentyp: High Memory, 16 vCPUs, 104 GB Dies ist die Maschine, die Cloud SQL for PostgreSQL der entsprechenden AlloyDB-Instanz, die Sie im AlloyDB-Benchmarking-Abschnitt dieses Dokuments erstellt haben, am nächsten kommt.
- Speicherkapazität: Benutzerdefiniert, 1.500 GB
- Automatische Speichererhöhungen aktivieren
- Verschlüsselung: Google-owned and Google-managed encryption key
- Verbindungen: Private IP-Adresse
- Netzwerk:
default - Öffentliche IP-Adresse: Aktiviert
- Netzwerk:
Klicken Sie auf Instanz erstellen.
Notieren Sie sich nach dem Erstellen der PostgreSQL-Instanz die private IP-Adresse. Sie verwenden die IP-Adresse als
PGHOST, um Verbindungen mit dem Benchmark herzustellen.
Clientcomputer bereitstellen
Cloud SQL for PostgreSQL-Instanz bereitstellen Wenn Sie den OLTP-Benchmark Ihrer Wahl ausführen möchten, benötigen Sie einen Clientcomputer mit hoher CPU-Leistung in derselben Zone wie die primäre Cloud SQL for PostgreSQL-Instanz in Cloud SQL.
Optional: Alternativ zum vorherigen Schritt können Sie denselben Clientcomputer verwenden, den Sie für das AlloyDB-Benchmarking eingerichtet haben, sofern Folgendes zutrifft:
- Der Clientcomputer befindet sich in derselben Zone wie die neue primäre PostgreSQL-Instanz (Cloud SQL for PostgreSQL).
- Der Clientcomputer erfüllt die Mindestanforderungen an CPU, RAM und Laufwerksgröße.
In diesem Benchmarking-Leitfaden haben Sie die Clientmaschinen wiederverwendet, wenn sie sich in derselben Zone wie die primäre Instanz befanden und groß genug waren, um den Server auf seine volle Kapazität zu bringen.
Wenn Sie einen neuen Clientcomputer erstellt haben, richten Sie den Benchmark-Treibercomputer ein. Folgen Sie andernfalls der Anleitung in diesem Leitfaden für den Benchmark, den Sie ausführen möchten.