Actian Vector und Vector in Hadoop sind leistungsstarke Tools für die effiziente Ausführung von Abfragen. Die meisten Nutzer von Data Analytics suchen jedoch nach Möglichkeiten, die Leistung zu optimieren, um schrittweise Verbesserungen bei abfragen zu erzielen.

Das Actian Service- und Support-Team arbeitet mit unseren Kunden zusammen, um gemeinsame Bereiche zu identifizieren, die untersucht werden sollten, wenn man die Leistung abfragen verbessern will. Die meisten unserer Empfehlungen gelten sowohl für Actian Vector (Single Node) als auch für Actian Vector in Hadoop (VectorH, ein Multi-Node Cluster auf Hadoop).

Actian hat kürzlich einen ausführlichen Überblick über technische Erkenntnisse und Best Practices veröffentlicht, die allen Vector- und VectorH-Anwendern helfen sollen, ihre Leistung zu optimieren, wobei der Schwerpunkt auf VectorH liegt.

Im Gegensatz zu abfragen auf Hadoop (Hive, Impala, Spark SQL, etc.) ist VectorH ein echtes spaltenorientiertes, MPP, RDBMS mit vollen Fähigkeiten von SQL, ACID-Transaktionen (d.h. Unterstützung für Updates und Deletes an Ort und Stelle), eingebauten robusten Sicherheitsoptionen, etc. Diese Flexibilität erlaubt es VectorH, für komplexe Arbeitslasten und Umgebungen optimiert zu werden.

Beachten Sie, dass Vector und VectorH sehr gut in der Lage sind, Abfragen effizient auszuführen, ohne eine der untersuchten Techniken zu verwenden. Diese Techniken sind jedoch für anspruchsvolle Arbeitslasten und stark ausgelastete Hadoop-Umgebungen sehr nützlich und ermöglichen es Ihnen, die besten Ergebnisse aus Ihrer Plattform herauszuholen.

Bei unserer Arbeit mit Kunden haben wir festgestellt, dass die folgenden Bereiche untersucht werden sollten, um eine maximale Leistung zu erzielen.

Partitionieren Sie Ihre Tabellen

Eine sehr wichtige Überlegung beim Schemadesign für ein Massively Parallel Processing (MPP)-System wie VectorH ist die Frage, wie die Daten in einem Cluster verteilt werden können, um die Ausführung von abfragen gleichmäßig auf alle verfügbaren Ressourcen zu verteilen. Wenn Sie Ihre Tabellen bei der Erstellung nicht explizit partitionieren, wird VectorH standardmäßig nicht partitionierte Tabellen erstellen - für eine optimale Leistung sollten Sie jedoch immer die größten Tabellen in Ihrer Datenbank partitionieren.

Vermeiden Sie Datenverzerrungen

Unausgewogene Daten, bei denen eine kleine Anzahl von Rechnern viel mehr Daten hat als die meisten anderen, werden als Datenschieflage bezeichnet. Datenschieflage kann zu schwerwiegenden Leistungsproblemen bei Abfragen führen, da der Rechner mit der überproportionalen Datenmenge die abfragen bestimmt und zu einem Engpass werden kann.

Fehlende Statistiken

Datendistribution sind für die korrekte Erstellung eines guten abfragen unerlässlich. In Ermangelung von Statistiken trifft der abfragen bestimmte Standardannahmen, z. B. darüber, wie viele Zeilen übereinstimmen werden, wenn zwei Tabellen miteinander verbunden werden. Beim Umgang mit größeren Datensätzen ist es viel besser, echte Daten über die tatsächliche Verteilung der Daten zu haben, als sich auf diese Schätzungen zu verlassen.

Daten sortieren

Das relationale Modell der Verarbeitung erfordert nicht, dass die Daten auf der Festplatte sortiert werden - stattdessen wird eine ORDER BY-Klausel auf eine abfragen verwendet, die die Daten in einer bestimmten Reihenfolge zurückfordert.

Durch die Verwendung von so genannten MinMax-Indizes (die automatisch in der Struktur einer Tabelle gepflegt werden, ohne dass Nutzer eingreifen muss) ist VectorH jedoch in der Lage, geordnete Daten zu verwenden, um unnötige Datenblöcke effizienter von der Verarbeitung auszuschließen und somit die Ausführung von abfragen zu beschleunigen, wenn diese eine WHERE-Klausel oder eine Join-Beschränkung für eine Spalte haben, nach der die Tabelle sortiert ist.

Verwendung der am besten geeigneten Datentypen

Wie bei jeder Datenbank kann die Wahl des richtigen Datentyps für Ihr Schema und Ihre Abfragen einen großen Einfluss auf die Leistung von VectorH haben, daher sollten Sie nicht aus Bequemlichkeit die maximale Spaltengröße verwenden. Berücksichtigen Sie stattdessen die größten Werte, die Sie wahrscheinlich in einer VARCHAR-Spalte speichern werden, und dimensionieren Sie Ihre Spalten entsprechend.

Da VectorH Spaltendaten sehr effektiv komprimiert, hat das Anlegen von Spalten, die viel größer als nötig sind, nur minimale Auswirkungen auf die Größe der Datentabellen. Da VARCHAR-Spalten intern als null-terminierte Zeichenketten gespeichert werden, hat die Größe der VARCHAR eigentlich keinen Einfluss auf die abfragen . Sie beeinflusst jedoch die Kommunikationszeiten des Frontends, da die Daten nach Verlassen der Engine in der maximal definierten Länge gespeichert werden. Beachten Sie jedoch, dass die Speicherung von Daten, die von Natur aus numerisch sind (IDs, Zeitstempel usw.), als VARCHAR-Daten sehr nachteilig für das System ist, da VectorH numerische Daten viel effizienter verarbeiten kann als Zeichendaten.

Speicherverwaltung für kleine Änderungen

VectorH verfügt über einen zum Patent angemeldeten Mechanismus für den effizienten Umgang mit vielen kleinen Datenänderungen, den sogenannten Positional Delta Trees (PDTs). Diese ermöglichen auch die Verwendung von Aktualisierungs- und Löschanweisungen für Daten, die in einem reinen Anhängedateisystem wie HDFS gespeichert sind.

Wenn jedoch viele Update-, Insert- oder Delete-Anweisungen ausgeführt werden, kann der Speicherbedarf für die PDT-Strukturen schnell ansteigen. Bei hohem Speicherbedarf kann das System bei der Verarbeitung künftiger Änderungen langsamer werden, und schließlich wird der Speicher erschöpft sein. Die Verwaltung dieses Speichers erfolgt automatisch, der Nutzer jedoch auch direkt eine „Combine”-Anweisung ausgeben, die die Änderungen aus dem PDT in einem als Update Propagation bezeichneten Prozess wieder in die Haupttabelle zusammenführt. Es gibt eine Reihe von Triggern, die das System dazu veranlassen, diese Wartung automatisch im Hintergrund durchzuführen (z. B. Schwellenwerte für den für PDTs verwendeten Gesamtspeicher oder den Prozentsatz der aktualisierten Zeilen), sodass dies für den Nutzer in der Regel transparent ist.

Optimieren für Zustimmung

VectorH ist so konzipiert, dass eine einzelne abfragen mit möglichst vielen parallelen Ausführungsthreads ausgeführt abfragen , um eine maximale Leistung zu erzielen. Allerdings ist es, was für ein MPP-System vielleicht untypisch ist, auch so konzipiert, dass es Zustimmung hohe Zustimmung einer demokratischen Zuweisung von Ressourcen ermöglicht, wenn eine hohe Anzahl von Abfragen an das System gestellt wird. VectorH bewältigt beide Situationen mit „Out-of-the-Box”-Einstellungen, kann jedoch an die Anforderungen der Anwendung angepasst werden (z. B. wenn ein höherer Durchsatz für anspruchsvolle Abfragen erzielt werden soll, indem die maximalen Ressourcen, die eine einzelne abfragen beanspruchen abfragen , begrenzt werden).

Die Anzahl der gleichzeitigen Verbindungen (standardmäßig 64), die eine bestimmte VectorH-Instanz zulässt, wird durch den Parameter connect_limit bestimmt, der in config.dat gespeichert ist und über das CBF-Dienstprogramm verwaltet wird. In der Regel gibt es jedoch mehr Verbindungen als Abfragen, wie werden also die Ressourcen auf die gleichzeitigen Abfragen verteilt?

Standardmäßig versucht VectorH, Arbeitslasten mit abfragen und abfragen Abfragen auszugleichen. Die wichtigsten Parameter für diesen Ausgleich sind:

  • Die Anzahl der CPU im Cluster.
  • Die Anzahl der Threads, die eine abfragen verwenden kann.
  • Die Anzahl der Threads, die einer abfragen vom System zugewiesen werden.
  • Die Anzahl der Abfragen, die derzeit im System ausgeführt werden.

Zusammenfassung

Vector und VectorH sind sehr gut in der Lage, Abfragen effizient auszuführen, ohne eine der hier beschriebenen Techniken und Tipps anzuwenden. Aber je anspruchsvoller Ihr Workload ist, entweder in Bezug auf die Datenmenge, die Komplexität der abfragen oder dieZustimmung Nutzer , desto mehr werden Sie durch die Anwendung einiger der im vollständigen Bericht beschriebenen Tipps die besten Ergebnisse aus Ihrer Plattform herausholen können.