Verbesserung der Abfrageleistung für RDS für MySQL mit Amazon RDS Optimized Reads - Amazon Relational Database Service

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 RDS für MySQL mit Amazon RDS Optimized Reads

Mit Amazon RDS Optimized Reads können Sie eine schnellere Abfrageverarbeitung für RDS für MySQL erreichen. Eine DB-Instance oder ein Multi-AZ-DB-Cluster von RDS für MySQL, die bzw. der RDS-optimierte Lesevorgänge verwendet, kann eine doppelt so schnelle Abfrageverarbeitung erreichen wie eine DB-Instance oder ein DB-Cluster, die bzw. der diese Funktion nicht verwendet.

Übersicht über RDS Optimized Reads

Wenn Sie eine DB-Instance oder einen Multi-AZ-DB-Cluster von RDS für MySQL verwenden, für die bzw. den RDS-optimierte Lesevorgänge aktiviert sind, wird durch die Verwendung eines Instance-Speichers eine schnellere Abfrageleistung erreicht. Ein Instance-Speicher stellt für Ihre DB-Instance bzw. Ihren Multi-AZ-DB-Cluster temporären Speicher auf Blockebene bereit. Der Speicher befindet sich auf Non-Volatile Memory Express (NVMe)-SSDs, die physisch mit dem Hostserver verbunden sind. Dieser Speicher ist für niedrige Latenzen, eine hohe Random-I/O-Leistung und einen hohen sequentiellen Lesedurchsatz optimiert.

RDS-optimierte Lesevorgänge sind standardmäßig aktiviert, wenn eine DB-Instance oder ein Multi-AZ-DB-Cluster eine DB-Instance-Klasse mit einem Instance-Speicher wie db.m5d oder db.m6gd verwendet. Mit RDS Optimized Reads werden einige temporäre Objekte im Instance-Speicher abgelegt. Zu diesen temporären Objekten gehören interne temporäre Dateien, interne temporäre Tabellen auf der Festplatte, Speicherzuordnungsdateien und Binärprotokolldateien (binlog) im Cache. Weitere Informationen zum Instance-Speicher finden Sie unter Instance-Speicher von Amazon EC2 im Benutzerhandbuch für Amazon Elastic Compute Cloud für Linux-Instances.

Die Workloads, die temporäre Objekte in MySQL für die Abfrageverarbeitung generieren, können den Instance-Speicher für eine schnellere Abfrageverarbeitung nutzen. Diese Art von Workload umfasst Abfragen mit Sortierungen, Hash-Aggregationen, Joins mit hoher Auslastung, Common Table Expressions (CTEs) und Abfragen für nicht indizierte Spalten. Diese Instance-Speicher-Volumes bieten höhere IOPS und eine höhere Leistung, unabhängig von den Speicherkonfigurationen, die für persistenten Amazon EBS-Speicher verwendet werden. Da RDS Optimized Reads Operationen mit temporären Objekten in den Instance-Speicher auslagert, können die Eingabe-/Ausgabevorgänge pro Sekunde (IOPS) oder der Durchsatz des persistenten Speichers (Amazon EBS) jetzt für Operationen an persistenten Objekten verwendet werden. Zu diesen Vorgängen gehören reguläre Lese- und Schreibvorgänge von Datendateien sowie Engine-Operationen im Hintergrund, wie das Leeren und Zusammenführen von Puffern zum Einfügen.

Anmerkung

Sowohl manuelle als auch automatisierte RDS-Snapshots enthalten nur Engine-Dateien für persistente Objekte. Die im Instance-Speicher erstellten temporären Objekte sind nicht in RDS-Snapshots enthalten.

Anwendungsfälle für RDS Optimized Reads

Wenn Sie Workloads haben, deren Abfrageausführung stark auf temporäre Objekte wie interne Tabellen oder Dateien angewiesen ist, können Sie von der Aktivierung von RDS Optimized Reads profitieren. Die folgenden Anwendungsfälle eignen sich für RDS Optimized Reads:

  • Anwendungen, die analytische Abfragen mit komplexen Common Table Expressions (CTEs), abgeleiteten Tabellen und Gruppierungsoperationen ausführen

  • Lesereplikate, die einen hohen Leseverkehr mit nicht optimierten Abfragen bewältigen

  • Anwendungen, die auf Abruf laufen oder dynamische Berichtsabfragen ausführen, die komplexe Operationen beinhalten, z. B. Abfragen mit GROUP BY- und ORDER BY-Klauseln

  • Workloads, die interne temporäre Tabellen für die Abfrageverarbeitung verwenden

    Sie können die Engine-Statusvariable created_tmp_disk_tables überwachen, um die Anzahl der festplattenbasierten temporären Tabellen zu ermitteln, die auf Ihrer DB-Instance erstellt wurden.

  • Anwendungen, die direkt oder in Prozeduren große temporäre Tabellen zum Speichern von Zwischenergebnissen erstellen

  • Datenbankabfragen, die das Gruppieren oder Sortieren von nicht indizierten Spalten durchführen

Bewährte Methoden für RDS Optimized Reads

Nutzen Sie die folgenden bewährten Methoden für RDS Optimized Reads:

  • Fügen Sie Wiederholungslogik für schreibgeschützte Abfragen hinzu, falls diese aufgrund eines Fehlers wegen eines vollen Instance-Speichers während der Ausführung fehlschlagen.

  • Überwachen Sie den verfügbaren Speicherplatz im Instance-Speicher mit der CloudWatch-Metrik FreeLocalStorage. Wenn der Instance-Speicher aufgrund der Workload der DB-Instance sein Limit erreicht, ändern Sie die DB-Instance, um eine größere DB-Instance-Klasse zu verwenden.

  • Wenn Ihre DB-Instance bzw. Ihr Multi-AZ-DB-Cluster über ausreichend Speicher verfügt, aber immer noch das Speicherlimit für den Instance-Speicher erreicht, erhöhen Sie den binlog_cache_size-Wert, um die sitzungsspezifischen Binlog-Einträge im Speicher zu behalten. Diese Konfiguration verhindert, dass die Binlog-Einträge in temporäre Binlog-Cache-Dateien auf der Festplatte geschrieben werden.

    Der binlog_cache_size-Parameter ist sitzungsspezifisch. Sie können den Wert für jede neue Sitzung ändern. Die Einstellung für diesen Parameter kann die Speicherauslastung der DB-Instance bei Spitzenauslastung erhöhen. Erwägen Sie daher, den Parameterwert auf der Grundlage des Workload-Musters Ihrer Anwendung und des verfügbaren Speichers in der DB-Instance zu erhöhen.

  • Verwenden Sie den Standardwert MIXED für binlog_format. Abhängig von der Größe der Transaktionen kann die Einstellung von binlog_format auf ROW zu großen Binlog-Cache-Dateien im Instance-Speicher führen.

  • Stellen Sie den Parameter internal_tmp_mem_storage_engine auf TempTable ein und legen Sie den Parameter temptable_max_mmap so fest, dass er der Größe des verfügbaren Speichers im Instance-Speicher entspricht.

  • Vermeiden Sie es, Massenänderungen in einer einzigen Transaktion durchzuführen. Diese Arten von Transaktionen können große Binlog-Cache-Dateien im Instance-Speicher generieren und Probleme verursachen, wenn der Instance-Speicher voll ist. Erwägen Sie, Schreibvorgänge in mehrere kleine Transaktionen aufzuteilen, um den Speicherverbrauch für Binlog-Cache-Dateien zu minimieren.

  • Verwenden Sie den Standardwert ABORT_SERVER für den binlog_error_action-Parameter. Dadurch werden Probleme mit der binären Protokollierung auf DB-Instances mit aktivierten Backups vermieden.

Verwenden von RDS Optimized Reads

Wenn Sie eine DB-Instance von RDS für MySQL mit einer der folgenden DB-Instance-Klassen in einer Single-AZ-Bereitstellung oder einer Multi-AZ-Bereitstellung der DB-Instance oder in einer Multi-AZ-DB-Cluster-Bereitstellung bereitstellen, verwendet die DB-Instance automatisch RDS Optimized Reads.

Führen Sie einen der folgenden Schritte aus, um RDS Optimized Reads zu aktivieren:

  • Erstellen Sie eine DB-Instance oder einen Multi-AZ-DB-Cluster von RDS für MySQL mit einer dieser DB-Instance-Klassen. Weitere Informationen finden Sie unter Erstellen einer Amazon RDS-DB-Instance.

  • Ändern Sie eine vorhandene DB-Instance oder einen Multi-AZ-DB-Cluster von RDS für MySQL so, dass eine dieser DB-Instance-Klassen verwendet wird. Weitere Informationen finden Sie unter Ändern einer Amazon RDS-DB-Instance.

RDS Optimized Reads ist in allen AWS-Regionen verfügbar, in denen eine oder mehrere der DB-Instance-Klassen mit lokalem NVMe-SSD-Speicher unterstützt werden. Weitere Informationen zu DB-Instance-Klassen finden Sie unter DB-Instance-Klassen.

Die Verfügbarkeit der DB-Instance-Klasse ist für AWS-Regionen unterschiedlich. Informationen dazu, ob eine DB-Instance-Klasse in einer bestimmten AWS-Region unterstützt wird, finden Sie unter Bestimmung der Unterstützung für DB-Instance-Klassen in AWS-Regionen.

Wenn Sie RDS-optimierte Lesevorgänge nicht verwenden möchten, ändern Sie Ihre DB-Instance bzw. Ihren Multi-AZ-DB-Cluster so, dass keine DB-Instance-Klasse verwendet wird, die die Funktion unterstützt.

Überwachen von DB-Instances, die RDS Optimized Reads verwenden

Sie können DB-Instances, die RDS Optimized Reads verwenden, mit den folgenden CloudWatch-Metriken überwachen:

  • FreeLocalStorage

  • ReadIOPSLocalStorage

  • ReadLatencyLocalStorage

  • ReadThroughputLocalStorage

  • WriteIOPSLocalStorage

  • WriteLatencyLocalStorage

  • WriteThroughputLocalStorage

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

Einschränkungen für RDS Optimized Reads

Für RDS Optimized Reads gelten die folgenden Einschränkungen:

  • RDS Optimized Reads wird für MySQL Version 8.0.28 und höher unterstützt. Informationen zu den Versionen von RDS für MySQL finden Sie unter MySQL in Amazon RDS-Versionen.

  • Sie können den Speicherort temporärer Objekte in den DB-Instance-Klassen, die RDS Optimized Reads unterstützen, nicht auf persistenten Speicher (Amazon EBS) ändern.

  • Wenn die binäre Protokollierung auf einer DB-Instance aktiviert ist, ist die maximale Transaktionsgröße durch die Größe des Instance-Speichers begrenzt. Bei MySQL schreibt jede Sitzung, die mehr Speicherplatz als den Wert binlog_cache_size benötigt, Transaktionsänderungen in temporäre Binlog-Cache-Dateien, die im Instance-Speicher erstellt werden.

  • Transaktionen können fehlschlagen, wenn der Instance-Speicher voll ist.