Optimieren des Speichers für bessere Performance

Unter diesem Thema werden Möglichkeiten zur Speicheroptimierungen erörtert, die die Abfrageleistung verbessern können, z. B. das gemeinsame Speichern ähnlicher Daten, das Erstellen optimierter Datenstrukturen und das Definieren spezialisierter Datensets. Snowflake bietet drei dieser Speicherstrategien an: automatisches Clustering, Suchoptimierung und materialisierte Ansichten.

Im Allgemeinen verbessern diese Speicherstrategien die Performance von Abfragen, die bereits in einer Sekunde oder schneller ausgeführt werden, nicht wesentlich.

Die unter diesem Thema behandelten Strategien sind nur eine Möglichkeit, die Performance von Abfragen zu steigern. Weitere Strategien in Bezug auf die zur Ausführung einer Abfrage verwendeten Computeressourcen finden Sie unter Optimieren von Warehouses für bessere Performance.

Einführung in Speicherstrategien

Automatic Clustering

Snowflake speichert die Daten einer Tabelle in Mikropartitionen. Unter diesen Mikropartitionen organisiert (d. h. clustert) Snowflake die Daten auf der Grundlage ihrer Dimensionen. Wenn eine Abfrage entlang dieser Dimensionen filtert, verknüpft oder aggregiert, müssen weniger Mikropartitionen durchsucht werden, um Ergebnisse zu liefern, was die Abfrage erheblich beschleunigt.

Sie können einen Gruppierungsschlüssel festlegen, um die Standardorganisation der Mikropartitionen zu ändern, sodass die Daten um bestimmte Dimensionen (d. h. Spalten) geclustert werden. Die Verwendung eines Gruppierungsschlüssels verbessert die Performance von Abfragen, die auf den im Gruppierungsschlüssel definierten Spalten filtern, verknüpfen oder aggregieren.

Sobald Sie einen Gruppierungsschlüssel definiert haben, aktiviert Snowflake das Automatic Clustering, um das Clustering der Tabelle zu warten. Sobald das Automatic Clustering aktiviert ist, werden die Mikropartitionen aktualisiert, wenn neue Daten zur Tabelle hinzugefügt werden. Mehr erfahren

Suchoptimierungsdienst

Der Suchoptimierungsdienst verbessert die Performance von Punktsuchabfragen (d. h. Suche nach „Nadel im Heuhaufen“), die unter Verwendung hochselektiver Filter eine kleine Anzahl von Zeilen aus einer Tabelle zurückgeben. Der Suchoptimierungsdienst ist ideal, wenn bei Suchabfragen eine niedrige Latenz wichtig ist (z. B. beim investigativen Durchsuchen von Protokollen, beim Erkennen von Bedrohungen oder Anomalien oder bei kritischen Dashboards mit selektiven Filtern).

Der Suchoptimierungsdienst reduziert die Latenz von Punktsuchabfragen durch Aufbau einer persistenten Datenstruktur, die für einen bestimmten Typ von Suche optimiert ist.

Sie können den Suchoptimierungsdienst für eine ganze Tabelle oder nur für bestimmte Spalten aktivieren. Solange sie selektiv genug sind, können Gleichheitssuchen, Suchläufe nach Teilzeichenfolgen und geografische Suchläufe auf diesen Spalten erheblich beschleunigt werden.

Der Suchoptimierungsdienst unterstützt sowohl strukturierte als auch semistrukturierte Daten (siehe unterstützte Datentypen).

Der Suchoptimierungsdienst erfordert Snowflake Enterprise Edition oder höher. Mehr erfahren

Materialisierte Ansichten

Eine materialisierte Ansicht ist ein vorab verarbeitetes Datenset, das aus einer SELECT-Anweisung abgeleitet und zur späteren Verwendung gespeichert wird. Da die Daten vorverarbeitet sind, ist das Abfragen einer materialisierten Ansicht schneller als das Ausführen einer Abfrage auf der Basistabelle, auf der die Ansicht definiert ist. Wenn Sie z. B. beim Erstellen der materialisierten Ansicht SELECT SUM(column1) angeben, wird eine Abfrage, die SUM(column1) aus der Ansicht zurückgibt, schneller ausgeführt, da column1 bereits aggregiert wurde.

Materialisierte Ansichten wurden entwickelt, um die Abfrageleistung für Workloads zu verbessern, die aus häufigen, sich wiederholenden Abfragemustern bestehen, die eine kleine Anzahl von Zeilen und/oder Spalten im Verhältnis zur Basistabelle zurückgeben.

Eine materialisierte Ansicht kann nur auf einer einzigen Tabelle basieren.

Materialisierte Ansichten erfordern Snowflake Enterprise Edition oder höher. Mehr erfahren

Auswählen einer Optimierungsstrategie

Verschiedene Typen von Abfragen profitieren von unterschiedlichen Speicherstrategien. Sie können die folgenden Abschnitte nutzen, um herauszufinden, welche Strategie am besten zu einem Workload passt.

Automatic Clustering ist die umfassendste Option, von der zahlreiche Abfragen profitieren können, die auf dieselben Spalten einer Tabelle zugreifen. Ein Administrator wählt oft die wichtigsten Abfragen auf der Grundlage von Häufigkeit und Latenzanforderungen aus und wählt dann einen Gruppierungsschlüssel, der die Performance dieser Abfragen maximiert. Automatic Clustering ist sinnvoll, wenn viele Abfragen dieselben wenigen Spalten filtern, verknüpfen oder aggregieren.

Suchoptimierungsdienst und materialisierte Ansichten haben einen engeren Geltungsbereich. Wenn bestimmte Abfragen auf eine genau definierte Teilmenge der Daten einer Tabelle zugreifen, kann der Administrator anhand der Merkmale der Abfrage entscheiden, ob die Verwendung des Suchoptimierungsdienstes oder einer materialisierten Ansicht die Performance verbessern könnte. So können Administratoren beispielsweise wichtige Punktsuchabfragen identifizieren und den Suchoptimierungsdienst für eine Tabelle oder Spalte implementieren. Ebenso könnten Administratoren bestimmte Abfragemuster optimieren, indem sie eine materialisierte Ansicht erstellen.

Sie können mehr als eine dieser Strategien für eine Tabelle implementieren. Eine einzelne Abfrage mit mehreren Filtern kann möglicherweise sowohl vom Automatic Clustering als auch vom Suchoptimierungsdienst profitieren. Das Aktivieren des Suchoptimierungsdienstes oder das Erstellen einer materialisierten Ansicht auf einer geclusterten Tabelle kann jedoch teurer sein. Warum dies die Computekosten erhöht, erfahren Sie unter Laufende Kosten (unter diesem Thema).

Wenn mehr als eine Strategie die Performance einer bestimmten Abfrage verbessern könnte, sollten Sie mit dem Automatic Clustering oder dem Suchoptimierungsdienst beginnen, da andere Abfragen mit ähnlichen Zugriffsmustern ebenfalls davon profitieren könnten.

Aspekte zur weiteren Differenzierung

Im Folgenden werden die verschiedenen Speicherstrategien nicht erschöpfend verglichen, sondern es werden vielmehr die wichtigsten Aspekte zur weiteren Differenzierung aufgeführt.

Automatic Clustering
  • Die größte Leistungssteigerung kann bei einer WHERE-Klausel erzielt werden, die eine Filterung auf einer Spalte des Gruppierungsschlüssels vornimmt. Dies kann aber auch die Leistung anderer Klauseln und Funktionen verbessern, die auf derselben Spalte ausgeführt werden (z. B. Joins und Aggregationen).

  • Ideal für Bereichsabfragen oder Abfragen mit einem Ungleichheitsfilter. Verbessert auch einen Gleichheitsfilter, aber der Suchoptimierungsdienst ist in der Regel schneller bei Punktsuchabfragen.

  • Verfügbar in der Standard Edition von Snowflake.

  • Es kann nur einen Gruppierungsschlüssel geben. [1] Wenn verschiedene Abfragen auf verschiedenen Spalten einer Tabelle ausgeführt werden, sollten Sie stattdessen den Suchoptimierungsdienst oder eine materialisierte Ansicht verwenden.

Suchoptimierungsdienst
  • Verbessert Punktsuchabfragen, die eine geringe Anzahl von Zeilen zurückgeben. Wenn die Abfrage mehr als nur ein paar Datensätze zurückgibt, sollten Sie stattdessen das Automatic Clustering in Betracht ziehen.

  • Bietet Unterstützung für folgende Punktsuchabfragen:

    • Abgleichen von Teilzeichenfolgen oder regulären Ausdrücken unter Verwendung von Prädikaten wie LIKE und RLIKE.

    • Suche nach bestimmten Feldern in VARIANT-, ARRAY- oder OBJECT-Spalten.

    • Verwenden von Geodatenfunktionen mit GEOGRAPHY-Werten.

Materialisierte Ansicht
  • Verbessert intensive und häufige Berechnungen wie Aggregation und Analyse semistrukturierter Daten (nicht nur Filterung).

  • In der Regel auf eine bestimmte Verarbeitung einer Abfrage/Unterabfrage ausgerichtet.

  • Verbessert Abfragen auf externen Tabellen.

[1] Wenn es einen wichtigen Grund gibt, mehrere Gruppierungsschlüssel zu definieren, können Sie mehrere materialisierte Ansichten erstellen, jede mit ihrem eigenen Gruppierungsschlüssel.

Prototypische Abfragen

Die folgenden Beispiele sollen verdeutlichen, welcher Typ von Abfrage mit einer bestimmten Speicherstrategie in der Regel schneller ausgeführt wird.

Prototypische Abfrage für Clustering

Automatic Clustering bietet eine Leistungssteigerung für Bereichsabfragen mit Scans auf großen Tabellen. Die folgende Abfrage wird beispielsweise schneller ausgeführt, wenn die Spalte shipdate der Gruppierungsschlüssel der Tabelle ist, da die WHERE-Klausel eine große Menge an Daten scannt.

SELECT
  SUM(quantity) AS sum_qty,
  SUM(extendedprice) AS sum_base_price,
  AVG(quantity) AS avg_qty,
  AVG(extendedprice) AS avg_price,
  COUNT(*) AS count_order
FROM lineitem
WHERE shipdate >= DATEADD(day, -90, to_date('2023-01-01));
Copy

Ein weiteres Beispiel für eine Abfrage, die schneller ausgeführt werden könnte, wenn die Tabelle geclustert wäre, finden Sie unter Vorteile der Definition von Gruppierungsschlüsseln (für sehr große Tabellen).

Prototypische Abfrage für die Suchoptimierung

Der Suchoptimierungsdienst kann eine Leistungssteigerung für Punktsuchabfragen bieten, die eine große Tabelle durchsuchen, um eine kleine Teilmenge von Datensätzen zurückzugeben. Die folgende Abfrage wird zum Beispiel mit dem Suchoptimierungsdienst schneller ausgeführt, wenn die Spalte sender_ip eine große Anzahl diskreter Werte enthält.

SELECT error_message, receiver_ip
FROM logs
WHERE sender_ip IN ('198.2.2.1', '198.2.2.2');
Copy

Um weitere Abfragen zu überprüfen, die mit dem Suchoptimierungsdienst möglicherweise schneller ausgeführt werden könnten, sehen Sie sich die folgenden Beispiele an:

Prototypische Abfrage für materialisierte Ansicht

Eine materialisierte Ansicht kann eine Leistungssteigerung für Abfragen bieten, die auf eine kleine Teilmenge von Daten zugreifen und dabei teure Operationen wie Aggregation verwenden. Angenommen, ein Administrator hat beim Erstellen der materialisierten Ansicht mv_view1 die Spalte totalprice aggregiert. Die folgende Abfrage wird auf der materialisierten Ansicht schneller ausgeführt als auf der Basistabelle.

SELECT
  orderdate,
  SUM(totalprice)
FROM mv_view1
GROUP BY 1;
Copy

Weitere Anwendungsfälle, in denen materialisierte Ansichten Abfragen beschleunigen können, finden Sie unter Anwendungsfälle von materialisierten Ansichten.

Implementierung und Kostenüberlegungen

In diesem Abschnitt werden Kostenerwägungen bei der Verwendung einer Speicherstrategie zur Verbesserung der Abfrageleistung sowie Implementierungsüberlegungen im Hinblick auf das Kosten-Performance-Verhältnis erörtert.

Erstinvestition

Das Implementieren einer Speicherstrategie kann ein größeres zeitliches und finanzielles Engagement erfordern als andere Arten der Leistungsoptimierung (z. B. das Neuschreiben von SQL-Anweisungen oder die Optimierung des Warehouses, in dem die Abfrage ausgeführt wird), aber die Leistungsverbesserungen können erheblich sein.

Snowflake verwendet serverlose Computeressourcen, um jede Speicherstrategie zu implementieren, wodurch Credits verbraucht werden, bevor Sie testen können, inwieweit die Optimierungsmaßnahme die Performance tatsächlich verbessert. Darüber hinaus kann Snowflake eine beträchtliche Zeit benötigen, um das Automatic Clustering und den Suchoptimierungsdienst vollständig zu implementieren (z. B. eine Woche für eine sehr große Tabelle).

Für den Suchoptimierungsdienst und die materialisierten Ansichten ist außerdem die Enterprise Edition oder höher erforderlich, wodurch sich der Preis pro Credit erhöht.

Laufende Kosten

Bei Speicherstrategien fallen sowohl Compute- als auch Speicherkosten an.

Computekosten

Snowflake verwendet serverlose Computeressourcen, um Speicheroptimierungen zu warten, wenn neue Daten zu einer Tabelle hinzugefügt werden. Je mehr Änderungen an einer Tabelle vorgenommen werden, desto höher sind die Wartungskosten. Wenn eine Tabelle ständig aktualisiert wird, könnten die Kosten für die Aufrechterhaltung einer Speicheroptimierung unerschwinglich sein.

Die Kosten für die Wartung der materialisierten Ansichten oder des Suchoptimierungsdienstes können erheblich sein, wenn für die zugrunde liegende Tabelle das Automatic Clustering aktiviert ist. Beim Automatic Clustering führt Snowflake ein ständiges Reclustering seiner Mikropartitionen rund um die Dimensionen des Gruppierungsschlüssels aus. Jedes Mal, wenn die Basistabelle neu geclustert wird, muss Snowflake serverlose Computeressourcen verwenden, um den von materialisierten Ansichten und dem Suchoptimierungsdienst verwendeten Speicher zu aktualisieren. Infolgedessen können Automatic Clustering-Aktivitäten auf der Basistabelle Wartungskosten für materialisierte Ansichten und den Suchoptimierungsdienst auslösen, die über die Kosten der DML-Befehle auf der Basistabelle hinausgehen.

Speicherkosten
Automatic Clustering

Im Gegensatz zum Suchoptimierungsdienst und zu materialisierten Ansichten werden beim Automatic Clustering vorhandene Daten reorganisiert, anstatt zusätzlichen Speicherplatz zu schaffen. Allerdings kann das Reclustering zusätzliche Speicherkosten verursachen, wenn es die Größe des Fail-safe-Speichers erhöht. Weitere Informationen dazu finden Sie unter Auswirkung von Reclustering auf Credit- und Speicherverbrauch.

Suchoptimierung / Materialisierte Ansichten

Bei materialisierten Ansichten und dem Suchoptimierungsdienst fallen Kosten für zusätzlichen Speicherplatz an. Die Kosten werden zum Standardtarif berechnet.

Abschätzen der Kosten

Suchoptimierungsdienst

Sie können die Funktion SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS ausführen, um die Kosten für das Hinzufügen des Suchoptimierungsdienstes zu einer Spalte oder einer ganzen Tabelle zu schätzen. Die geschätzten Kosten richten sich nach der Anzahl der zu aktivierenden Spalten und danach, wie stark sich die Tabelle zuletzt verändert hat.

Implementierungsstrategie

Da die Compute- und Speicherkosten einer Speicherstrategie beträchtlich sein können, empfiehlt es sich, klein anzufangen und die anfänglichen und laufenden Kosten sorgfältig zu überwachen, bevor Sie sich für eine umfangreichere Implementierung entscheiden. Sie könnten zum Beispiel einen Gruppierungsschlüssel nur für eine oder zwei Tabellen wählen und dann die Kosten abschätzen, bevor Sie einen Schlüssel für andere Tabellen wählen.

Beim Verfolgen der laufenden Kosten einer Speicherstrategie ist zu beachten, dass virtuelle Warehouses nur während der Ausführung einer Abfrage Credits verbrauchen, sodass eine schnell ausgeführte Abfrage weniger kostet. Snowflake empfiehlt, die Kosten für das Ausführen einer Abfrage vor der Speicheroptimierung sorgfältig zu ermitteln, um sie dann mit den Kosten für das Ausführen derselben Abfrage nach der Speicheroptimierung zu vergleichen, sodass dieser Aspekt in die Kostenbewertung einfließen kann.