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.
Wichtige Schwerpunktbereiche zur Leistungsverbesserung
Trino maximiert Abfrageparallelität und Speicheroptimierung. Diese Architektur bietet Flexibilität, da sie es ermöglicht, mehrere, unterschiedliche Datenquellen abzufragen und gleichzeitig effizient zu skalieren. Zu den wichtigsten Bereichen der Leistungsverbesserung in Trino gehören die unten aufgeführten.
Optimierung des Speichers
Die Speicherverwaltung in Trino ist entscheidend für eine hohe Leistung und Stabilität, insbesondere wenn Sie große, komplexe Abfragen ausführen. Trino verwendet ein verteiltes Speichermodell. In diesem Modell wird den Worker-Nodes Speicher für die Verarbeitung von Aufgaben, Aggregationen, Verknüpfungen und anderen Vorgängen zugewiesen. In der folgenden Liste wird eine Sammlung dieser Einstellungen vorgestellt:
query.max-memory — Legt den maximalen Speicher fest, der für eine einzelne Abfrage im gesamten Cluster verfügbar ist. Dies ist eine feste Grenze. Wenn eine Abfrage diesen Speicher überschreitet, schlägt sie fehl.
query.max-memory-per-node — Definiert den maximalen Speicher, den eine Abfrage auf jedem Worker-Knoten verbrauchen kann. Wenn Sie diese Einstellung festlegen, wird sichergestellt, dass keine einzelne Abfrage die Ressourcen eines Workers monopolisiert.
JVM-Heap-Größe — Auf JVM-Ebene konfiguriert, legt sie die maximale Heap-Größe für den Trino-Serverprozess auf jedem Knoten fest. Dieser Wert sollte im Allgemeinen größer sein als die speicherbezogenen Konfigurationen (dies ist die Summe aus query.max-memory-per-node und memory.heap-headroom-per-node) in Trino, um zu verhindern, dass dem System auf JVM-Ebene der Speicher ausgeht.
memory.heap-headroom-per-node — Gibt die Speichermenge an, die außerhalb der JVM-Heap-Größe für Operationen, die keine Abfragen sind, weggelassen werden soll. Dies ist entscheidend, um sicherzustellen, dass genügend Overhead für interne Operationen und die Garbage-Collection zur Verfügung steht.
Dynamisches Filtern
Die dynamische Filterung in Trino ist eine Optimierungstechnik, die die Abfrageleistung verbessert, indem sie die Menge der verarbeiteten Daten reduziert, insbesondere bei Verknüpfungen. Sie wendet dynamisch Filterbedingungen an, um die Anzahl der von einer Seite einer Verknüpfung gescannten Daten auf der Grundlage der Daten auf der anderen Seite einzuschränken. Dies ist besonders nützlich bei Abfragen, bei denen eine Seite der Verknüpfung hochselektiv ist (was bedeutet, dass sie eine kleine Teilmenge von Daten enthält). Sie ist in Amazon EMR standardmäßig aktiviert. Im Folgenden finden Sie eine Beispielabfrage:
SELECT orders.order_id, orders.total_amount FROM orders JOIN customers ON orders.customer_id = customers.customer_id WHERE customers.country = 'France';
Ohne dynamische Filterung scannt Trino die gesamte Bestelltabelle in einem Join, obwohl nur ein kleiner Teil der Kunden (Kunden aus Frankreich) relevant ist. Bei diesem Ansatz werden alle Zeilen in der Bestelltabelle gelesen, was zu hohen I/O Bearbeitungskosten führt. Beim dynamischen Filtern scannt Trino zunächst die Tabelle mit den kleineren Kunden, ruft die customer_id-Werte nur für Kunden aus Frankreich ab und wendet diese Teilmenge dann als Filter auf Bestellungen an. Das bedeutet, dass nur relevante Zeilen aus Bestellungen — also solche, deren Kundennummer der gefilterten Teilmenge entspricht — gescannt werden, wodurch die Anzahl der verarbeiteten Datensätze erheblich reduziert wird.
Auf die Festplatte übertragen
In Trino ermöglicht Disk-Spilling das Auslagern von Zwischenabfrageergebnissen auf die Festplatte, sodass speicherintensive Abfragen abgeschlossen werden können, selbst wenn sie die durch oder festgelegten Speichergrenzen überschreiten. query_max_memory query_max_memory_per_node Standardmäßig setzt Trino diese Grenzwerte durch, um eine faire Speicherzuweisung zu gewährleisten und Cluster-Deadlocks zu verhindern. Wenn eine große Abfrage diese Grenzwerte jedoch überschreitet, besteht die Gefahr, dass sie beendet wird. Disk Spilling behebt dieses Problemrevocable memory, indem es verwendet wird, sodass eine Abfrage zusätzlichen Speicher ausleihen kann, der gesperrt werden kann, wenn Ressourcen an anderer Stelle benötigt werden. Wenn Speicher gesperrt wird, werden Zwischendaten auf die Festplatte übertragen, sodass Abfragen weiterverarbeitet werden können, ohne die Speicherbeschränkungen zu überschreiten. Bitte beachten Sie, dass eine Abfrage, die erzwungen wird, auf die Festplatte übertragen wird, eine längere Ausführungszeit haben kann und daher standardmäßig deaktiviert ist. Verwenden Sie die folgende Konfiguration, um Spill auf Amazon EMR zu aktivieren:
spill-enabled=true— Aktiviert Disk-Spilling, wenn die Speicherauslastung die verfügbaren Schwellenwerte überschreitet.spill-paths— Definiert die Verzeichnisse, in denen verschüttete Daten gespeichert werden,.spill-paths=/mnt/spill