Verbesserung der Abfrageleistung für Aurora PostgreSQL mit Aurora-optimierten Lesevorgängen - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verbesserung der Abfrageleistung für Aurora PostgreSQL mit Aurora-optimierten Lesevorgängen

Mit Aurora-optimierten Lesevorgängen können Sie eine schnellere Abfrageverarbeitung mit Aurora PostgreSQL erreichen. Eine Aurora-PostgreSQL-DB-Instance, die Aurora-optimierte Lesevorgänge verwendet, bietet eine bis zu achtmal verbesserte Abfragelatenz und bis zu 30 % Kosteneinsparungen für Anwendungen mit großen Datensätzen, die die Speicherkapazität einer DB-Instance überschreiten.

Übersicht über Aurora-optimierte Lesevorgänge in PostgreSQL

Aurora Optimized Reads ist standardmäßig verfügbar, wenn Sie einen DB-Cluster erstellen, der Graviton-basierte R6GD- und Intel-basierte R6ID-Instances mit nichtflüchtigem Memory-Express () -Speicher verwendet. NVMe Dies ist in den folgenden Versionen von PostgreSQL verfügbar:

  • 16.1 und alle höheren Versionen

  • 15.4 und höhere Versionen

  • 14.9 und höhere Versionen

Aurora-optimierte Lesevorgänge unterstützen zwei Funktionen: mehrstufigen Cache und temporäre Objekte.

Mehrstufiger Cache mit optimierten Lesevorgängen – Mithilfe eines mehrstufigen Caches können Sie die Caching-Kapazität Ihrer DB-Instance um das bis zu Fünffache des Instance-Speichers erweitern. Dadurch wird der Cache automatisch so verwaltet, dass er die aktuellsten, transaktionskonsistenten Daten enthält. Dadurch entfällt für Anwendungen der Aufwand, die Datenaktualität externer, auf Ergebnismengen basierender Caching-Lösungen zu verwalten. Dies bietet eine bis zu achtmal bessere Latenz für Abfragen, bei denen zuvor Daten aus dem Aurora-Speicher abgerufen wurden.

In Aurora ist der Wert für shared_buffers in der Standardparametergruppe normalerweise auf etwa 75% des verfügbaren Speichers festgelegt. Für die Instance-Typen r6gd und r6id reduziert Aurora den shared_buffers Speicherplatz jedoch um 4,5%, um die Metadaten für den Optimized Reads-Cache zu hosten.

Optimierte temporäre Objekte mit Lesezugriff — Mithilfe temporärer Objekte können Sie eine schnellere Abfrageverarbeitung erreichen, indem Sie die temporären Dateien, die von PostgreSQL generiert werden, im lokalen Speicher ablegen. NVMe Dadurch wird der Datenverkehr zu Elastic Block Storage (EBS) über das Netzwerk reduziert. Es bietet eine bis zu zweimal bessere Latenz und einen besseren Durchsatz für erweiterte Abfragen, bei denen große Datenmengen sortiert, zusammengeführt oder zusammengeführt werden, die nicht in die auf einer DB-Instance verfügbare Speicherkapazität passen.

In einem I/O-optimierten Aurora-Cluster verwendet Optimized Reads sowohl den mehrstufigen Cache als auch temporäre Objekte im Speicher. NVMe Mit der für optimierte Lesevorgänge aktivierten mehrstufigen Cache-Funktion weist Aurora den doppelten Instance-Speicher für temporäre Objekte zu, etwa 10 % des Speichers für interne Operationen und den verbleibenden Speicher als mehrstufigen Cache. In einem Aurora-Standard-Cluster verwenden optimierte Lesevorgänge nur temporäre Objekte.

Mit Aurora I/O-Optimized Clusters können Sie die Größe des zugewiesenen Speicherplatzes für temporäre Objekte mit aktivierten Optimized Reads mithilfe des dynamischen Parameters aurora_temp_space_size auf Instanzebene ändern. Diese Funktion zur Größenänderung ist in den folgenden PostgreSQL-Versionen verfügbar:

  • 16.8 und alle höheren Versionen

  • 15.12 und höhere 15-Versionen

  • 14.17 und höhere 14-Versionen

Mit diesem Parameter können Sie die Kapazität von 2x bis 6x des Instance-Speichers skalieren, ohne dass die Datenbank-Engine neu gestartet werden muss. Wenn Sie den temporären Objektspeicher erweitern, wird die Änderung sofort wirksam, unabhängig von gleichzeitigen Workloads. Wenn Sie den Speicherplatz reduzieren, wird die Anpassung jedoch erst abgeschlossen, wenn in den temporären Objekten genügend ungenutzter Speicherplatz für die neue Größenanforderung vorhanden ist. Nachdem Sie die Größe temporärer Objekte für optimierte Lesevorgänge geändert haben, passt sich der mehrstufige Cache automatisch an, um den verfügbaren Speicherplatz zu nutzen.

Engine Cluster-Speicherkonfiguration Temporäre Objekte mit optimierten Lesevorgängen Optimierter mehrstufiger Cache mit optimierten Lesevorgängen Unterstützte Versionen
Aurora PostgreSQL-Compatible Edition Standard Ja Nein Aurora PostgreSQL Version 16.1 und alle höheren Versionen, 15.4 und höher, Version 14.9 und höher
I/O-optimiert Ja Ja
Anmerkung

Ein Wechsel zwischen IO-optimierten Clustern und Standard-Clustern auf einer NVMe basierten DB-Instance-Klasse führt zu einem sofortigen Neustart der Datenbank-Engine.

Verwenden Sie in Aurora PostgreSQL den temp_tablespaces Parameter, um den Tablespace zu konfigurieren, in dem die temporären Objekte gespeichert werden.

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die temporären Objekte konfiguriert sind:

postgres=> show temp_tablespaces; temp_tablespaces --------------------- aurora_temp_tablespace (1 row)

Das aurora_temp_tablespace ist ein von Aurora konfigurierter Tablespace, der auf den NVMe lokalen Speicher verweist. Sie können diesen Parameter nicht ändern oder zum Amazon-EBS-Speicher zurückkehren.

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der Cache der optimierten Lesevorgänge aktiviert ist:

postgres=> show shared_preload_libraries; shared_preload_libraries -------------------------------------------------------- rdsutils,pg_stat_statements,aurora_optimized_reads_cache

Verwenden von Aurora-optimierten Lesevorgängen

Wenn Sie eine Aurora PostgreSQL-DB-Instance mit einer der NVMe basierten DB-Instances bereitstellen, verwendet die DB-Instance automatisch Aurora Optimized Reads.

Führen Sie einen der folgenden Schritte aus, um Aurora-optimierte Lesevorgänge zu aktivieren:

Aurora Optimized Reads ist überall verfügbar AWS-Regionen , wo eine oder mehrere DB-Instance-Klassen mit lokalem NVMe SSD-Speicher unterstützt werden. Weitere Informationen finden Sie unter Amazon Aurora Aurora-DB-Instance-Klassen.

Um zurück zu einer Aurora-Instance mit nicht optimierten Lesevorgängen zu wechseln, ändern Sie die DB-Instance-Klasse Ihrer Aurora-Instance auf eine ähnliche Instance-Klasse ohne NVMe kurzlebigen Speicher für Ihre Datenbank-Workloads. Wenn die aktuelle DB-Instance-Klasse beispielsweise db.r6gd.4xlarge ist, wählen Sie db.r6g.4xlarge aus, um zurückzuwechseln. Weitere Informationen finden Sie unter Ändern einer Amazon-DB-Instance.

Anwendungsfälle für Aurora-optimierte Lesevorgänge

Optimierter mehrstufiger Cache mit optimierten Lesevorgängen

Im Folgenden sind einige Anwendungsfälle aufgeführt, für die optimierte Lesevorgänge mit gestuftem Cache von Vorteil sein können:

  • Anwendungen im Internet-Maßstab wie Zahlungsabwicklung, Rechnungsstellung und E-Commerce mit strikter Leistung. SLAs

  • Echtzeit-Dashboards für Berichte, die Hunderte von Punktabfragen zur Erfassung von Metriken und Daten ausführen.

  • Generative KI-Anwendungen mit der Erweiterung pgvector zur Suche nach exakten oder nächstgelegenen Nachbarn in Millionen von Vektoreinbettungen.

Temporäre Objekte mit optimierten Lesevorgängen

Im Folgenden sind einige Anwendungsfälle aufgeführt, für die optimierte Lesevorgänge von Vorteil sein können:

  • Analytische Abfragen, die allgemeine Tabellenausdrücke (CTEs), abgeleitete Tabellen und Gruppierungsoperationen beinhalten.

  • Lesereplikate, die die nicht optimierten Abfragen für eine Anwendung verarbeiten.

  • Bedarfsgesteuerte oder dynamische Berichtsabfragen mit komplexen Operationen wie GROUP BY und ORDER BY, für die nicht immer die entsprechenden Indizes verwendet werden können.

  • CREATE INDEXoder REINDEX Operationen zum Sortieren.

  • Andere Workloads, die interne temporäre Tabellen verwenden.

Überwachen von DB-Instances, die Aurora-optimierte Lesevorgänge verwenden

Sie können Ihre Abfragen, die den mehrstufigen Cache mit optimierten Lesevorgängen zum Aktivieren von Lesevorgängen verwenden, wie im folgenden Beispiel dargestellt mit dem Befehl EXPLAIN überwachen:

Postgres=> EXPLAIN (ANALYZE, BUFFERS) SELECT c FROM sbtest15 WHERE id=100000000 QUERY PLAN -------------------------------------------------------------------------------------- Index Scan using sbtest15_pkey on sbtest15 (cost=0.57..8.59 rows=1 width=121) (actual time=0.287..0.288 rows=1 loops=1) Index Cond: (id = 100000000) Buffers: shared hit=3 read=2 aurora_orcache_hit=2 I/O Timings: shared/local read=0.264 Planning: Buffers: shared hit=33 read=6 aurora_orcache_hit=6 I/O Timings: shared/local read=0.607 Planning Time: 0.929 ms Execution Time: 0.303 ms (9 rows) Time: 2.028 ms
Anmerkung

aurora_orcache_hitund aurora_storage_read Felder im Buffers Abschnitt des Erläuterungsplans werden nur angezeigt, wenn Optimierte Lesevorgänge aktiviert sind und ihre Werte größer als Null sind. Das gelesene Feld ist die Summe der aurora_storage_read Felder aurora_orcache_hit und.

Sie können DB-Instances, die Aurora Optimized Reads verwenden, anhand der folgenden CloudWatch Metriken überwachen:

  • AuroraOptimizedReadsCacheHitRatio

  • FreeEphemeralStorage

  • ReadIOPSEphemeralStorage

  • ReadLatencyEphemeralStorage

  • ReadThroughputEphemeralStorage

  • WriteIOPSEphemeralStorage

  • WriteLatencyEphemeralStorage

  • WriteThroughputEphemeralStorage

Diese Metriken liefern Daten über den verfügbaren Instance-Speicher, die IOPS und den Durchsatz. Weitere Informationen zu diesen Metriken finden Sie unter Metriken auf Instance-Ebene für Amazon Aurora.

Sie können die pg_proctab Erweiterung auch zur NVMe Speicherüberwachung verwenden.

postgres=>select * from pg_diskusage(); major | minor | devname | reads_completed | reads_merged | sectors_read | readtime | writes_completed | writes_merged | sectors_written | writetime | current_io | iotime | totaliotime ------+-------+---------------------+-----------------+--------------+--------------+----------+------------------+---------------+-----------------+-----------+------------+---------+------------- | | rdstemp | 23264 | 0 | 191450 | 11670 | 1750892 | 0 | 24540576 | 819350 | 0 | 3847580 | 831020 | | rdsephemeralstorage | 23271 | 0 | 193098 | 2620 | 114961 | 0 | 13845120 | 130770 | 0 | 215010 | 133410 (2 rows)

Bewährte Methoden für Aurora-optimierte Lesevorgänge

Nutzen Sie die folgenden bewährten Methoden für Aurora-optimierte Lesevorgänge:

  • Überwachen Sie den im Instance-Speicher verfügbaren Speicherplatz anhand der CloudWatch MetrikFreeEphemeralStorage. Wenn der Instance-Speicher aufgrund der Arbeitslast auf der DB-Instance sein Limit erreicht, optimieren Sie die Parallelität und die Abfragen, die stark temporäre Objekte verwenden, oder ändern Sie ihn so, dass er eine größere DB-Instance-Klasse verwendet.

  • Überwachen Sie die CloudWatch Metrik für die Trefferquote im Cache für optimierte Lesevorgänge. Operationen wie VACUUM ändern sehr schnell eine große Anzahl von Blöcken. Dies kann zu einem vorübergehenden Rückgang der Trefferrate führen. Die pg_prewarm-Erweiterung kann verwendet werden, um Daten in den Puffer-Cache zu laden, so dass Aurora einige dieser Blöcke proaktiv in den Cache der optimierten Lesevorgänge schreiben kann.

  • Sie können das Cluster-Cache-Management (CCM) aktivieren, um den Puffer-Cache und den mehrstufigen Cache auf einem Tier-0-Reader aufzuwärmen, der als Failover-Ziel verwendet wird. Wenn CCM aktiviert ist, wird der Puffer-Cache regelmäßig gescannt, um Seiten, die bereinigt werden können, in den mehrstufigen Cache zu schreiben. Weitere Informationen zu CCM finden Sie unter Schnelle Wiederherstellung nach Failover mit der Cluster-Cacheverwaltung für Aurora PostgreSQL.

  翻译: