Bewährte Praktiken für Hybridtabellen¶
Dieses Thema beschreibt bewährte Verfahren und wichtige Überlegungen bei der Verwendung von Hybridtabellen. Um eine optimale Leistung mit Hybridtabellen zu erzielen, sollten Sie bei der Bereitstellung die folgenden bewährten Verfahren beachten. In diesem Leitfaden werden spezifische Konfigurations-, Design- und Betriebspraktiken beschrieben, die die Leistung für Produktions-Workloads maximieren.
Allgemeine Best Practices:
Best Practices zur Optimierung der Leistung:
Bewährte Verfahren für den Betrieb und die Überwachung von Hybridtabellen:
Abfrageleistung in Snowsight im Vergleich zum treiberbasierten Zugriff¶
Achtung
Die Leistungsstatistiken auf Snowsight sind kein Indikator für die Abfrageleistung bei treiberbasierten Workloads.
Snowsight bietet umfassenden Zugriff auf Abfragepläne, Datenstatistiken, Abfragehistorie und andere detaillierte Informationen, die für interaktives Abfrage-Prototyping, Debugging, Untersuchung, Überwachung und andere Aktivitäten nützlich sind. Die Bereitstellung dieser reichhaltigen interaktiven Erfahrung bedeutet einen zusätzlichen Aufwand für die Snowflake Abfrage-Engine. Daher ist die Latenz bei kurzen Abfragen, die über Snowsight ausgeführt werden, kein Indikator für die Leistung, die mit programmatischen Treibern erreicht werden kann. Abfragen, die über code- oder treiberbasierte Lösungen ausgeführt werden, laufen mit geringerer Latenz und Variabilität ab als Abfragen, die über Snowsight ausgeführt werden.
Bemerkung
Führen Sie einen einfachen Leistungstest durch, um die Leistung für Ihr Szenario zu überprüfen.
Clienttreiber für Hybridtabellen¶
Um auf Hybridtabellen zugreifen zu können, müssen Sie eine der folgenden Treiberversionen verwenden:
Treiber
Mindestversion
Go
1.6.25
JDBC
3.13.31
.Net
2.1.2
Node.js
1.9.0
ODBC
3.0.2
PHP
2.0.0
Python-Konnektor
3.1.0
SnowSQL
1.2.28
Bemerkung
Mit einer früheren Treiberversion können Sie möglicherweise nicht auf Hybridtabellen zugreifen.
Um eine optimale Leistung mit Hybridtabellen zu erzielen, stellen Sie sicher, dass Sie die neueste Version des von Ihnen gewählten Treibers verwenden.
Sie können auch auf Hybridtabellen zugreifen, indem Sie Snowflake-SQL-API verwenden. Diese API wird jedoch nicht für Anwendungsfälle empfohlen, die eine optimale Latenzzeit erfordern.
Client-Konfiguration und Zugriffsmethoden¶
Die Verbindungsverwaltung wirkt sich direkt auf die Leistung und Skalierbarkeit aus. Wenn Sie eine Verbindung zu Datenbanken herstellen, die Hybridtabellen enthalten, sollten Sie die folgenden bewährten Verfahren beachten, um eine gute Leistung zu erzielen.
Verwenden Sie das Verbindungs-Pooling mit langlebigen Verbindungen, um den Overhead durch den wiederholten Aufbau neuer Verbindungen zu vermeiden. Die meisten Client-Frameworks, die eine Verbindung zu Snowflake herstellen, bieten einen Verbindungs-Pooling-Mechanismus, um den Zugriff effizient zu verwalten.
Die Nähe des Netzwerks wirkt sich erheblich auf die End-to-End-Latenz aus. Daher sollten Sie Ihre Client-Software in derselben Cloud-Region wie das Snowflake-Konto unterbringen.
Verwenden Sie vorbereitete Anweisungen mit gebundenen Parametern, damit der Abfrageplaner zuvor erstellte Abfragepläne wiederverwendet.
Verwenden Sie die unterstützten programmatischen Client-Treiber, nicht Snowsight, um eine optimale Latenzzeit zu erreichen. Siehe Clienttreiber für Hybridtabellen.
Indexgestaltung und Verwendung¶
Das Erstellen und Verwenden von Indizes ist eine Schlüsselkomponente, um eine optimale Leistung für Hybridtabellen zu erzielen. Beachten Sie die folgenden Empfehlungen:
Erstellen Sie sekundäre Indizes für häufig verwendete Prädikate.
Entwerfen Sie zusammengesetzte Indizes, die vollständigen Abfrage-Mustern entsprechen.
Vermeiden Sie die Verwendung mehrerer Indizes mit Spalten an der gleichen Ordnungsposition.
Verstehen Sie die Kardinalität Ihrer Daten, bevor Sie Indizes erstellen. Indizes, die mit einer einzigen Spalte mit geringer Kardinalität erstellt wurden, haben nur einen begrenzten Nutzen. Siehe Schätzen der Anzahl diskreter Werte.
Indizes erhöhen den Schreib-Overhead und den Speicherbedarf. Achten Sie bei Anwendungen, die Schreibvorgänge mit geringer Latenz benötigen, auf ein ausgewogenes Verhältnis zwischen Lese- und Schreibleistung.
Richtig konzipierte Indizes verbessern die Abfrageleistung erheblich, indem sie effiziente Datenzugriffspfade bereitstellen. Wählen Sie, wenn möglich, Primärschlüssel für eine optimale Selektivität bei gleichzeitiger Minimierung der Komplexität. In einigen Fällen bietet das Hinzufügen von Spalten mit berechneten oder Ersatzschlüsselwerten eine bessere Leistung als komplexe zusammengesetzte Indizes. Sekundäre Indizes verbessern die Leistung von Spalten, auf die häufig zugegriffen wird, dramatisch.
Bei gut definierten Abfragen kann die Verwendung des Schlüsselworts INCLUDE zum Hinzufügen von Spalten zu einem Index bei der Erstellung der Tabelle die Latenzzeit weiter verringern. Siehe Sekundären Index mit einer INCLUDE-Spalte erstellen.
Achtung
Achten Sie auf die Indizes, die Sie für eine Hybridtabelle erstellen. Nicht-selektive Indexabfragen führen zu einer suboptimalen Leistung, Drosselung und höheren Kosten.
Abfragen, die sich für die Verwendung des Index qualifizieren¶
Auf Indizes von Hybridtabellen kann zugegriffen werden, wenn Abfragen eine der folgenden Bedingungen verwenden:
<spalten_referenz> {=, >, >=, <, <=} <konstanter_wert>
<spalten_referenz> IN <konstant_in_liste>
<spalten_referenz> BETWEEN <konstanter_wert> AND <konstanter_wert>
Ausdrücke können mit Logische Operatoren miteinander verkettet werden.
Beispiel:
CREATE OR REPLACE HYBRID TABLE icecream_orders (
id NUMBER PRIMARY KEY AUTOINCREMENT START 1 INCREMENT 1 ORDER,
store_id NUMBER NOT NULL,
flavor VARCHAR(20) NOT NULL,
order_ts TIMESTAMP_NTZ,
num_scoops NUMERIC,
INDEX idx_icecream_order_store (store_id, order_ts),
INDEX idx_icecream_timestamp (order_ts)
);
-- Generate sample data for testing
INSERT INTO icecream_orders (store_id, flavor, order_ts, num_scoops)
SELECT
UNIFORM(1, 10, RANDOM()),
ARRAY_CONSTRUCT('CHOCOLATE', 'VANILLA', 'STRAWBERRY', 'LEMON')[UNIFORM(0, 3, RANDOM())],
DATEADD(SECOND, UNIFORM(0, 86400, RANDOM()), DATEADD(DAY, UNIFORM(-90, 0, RANDOM()), CURRENT_DATE())),
UNIFORM(1, 3, RANDOM())
FROM TABLE(GENERATOR(ROWCOUNT => 10000))
;
-- Use idx_icecream_order_store (first column)
SELECT *
FROM icecream_orders
WHERE store_id = 5;
-- Use idx_icecream_order_store (both columns)
SELECT *
FROM icecream_orders
WHERE store_id IN (1,2,3) AND order_ts > DATEADD(DAY, -7, CURRENT_DATE());
-- Use idx_icecream_timestamp
SELECT *
FROM icecream_orders
WHERE order_ts BETWEEN DATEADD(DAY, -2, CURRENT_DATE()) AND DATEADD(DAY, -2, CURRENT_DATE());
Massenhaftes Laden von Daten¶
Für das Laden von Daten in Hybridtabellen können Sie verschiedene Optimierungen und bewährte Verfahren verwenden:
Verwenden Sie CREATE TABLE … AS SELECT (auch al CTAS bezeichnet), um leere Tabellen zu erstellen und sofort zu laden.
Überprüfen Sie die Verwendung von optimiertem Massenladen in Abfrageprofilen.
Bevorzugen Sie das anfängliche Laden von Daten als eine einzige Massentransaktion.
Hybridtabellen bieten einen optimierten Massenladepfad, der eine bis zu 10-mal schnellere Ladeleistung als Standard-Lademethoden bietet. Dieser optimierte Pfad für das Laden von Daten wird automatisch angewendet, wenn Sie mit den Befehlen CTAS (CREATE TABLE AS SELECT), COPY INTO oder INSERT INTO SELECT Daten in eine leere Tabelle laden. (Eine leere Tabelle ist eine Tabelle, die noch nie Daten enthalten hat.)
Sie können überprüfen, ob die Optimierung verwendet wird, indem Sie den Statistikabschnitt des Abfrageprofils überprüfen, wo Zeilen als Number of rows bulk loaded
und nicht als Number of rows inserted
gemeldet werden.
Bemerkung
CTAS-Operationen unterstützen keine FOREIGN KEY-Einschränkungen. Wenn Ihre Tabelle Fremdschlüssel benötigt, müssen Sie stattdessen COPY oder INSERT INTO SELECT verwenden.
Für Tabellen, die bereits Daten enthalten, ist der optimierte Massenladepfad derzeit nicht verfügbar. In diesen Fällen können die Ladevorgänge etwa 1 Million Datensätze pro Minute erreichen, wobei dies je nach Datensatzgröße, Tabellenstruktur und Anzahl der Indizes variiert.
Warehouse-Optimierung¶
Ein Warehouse der Größe X-Small ist für viele operative Workloads ausreichend. Um eine höhere Gleichzeitigkeit und einen höheren Durchsatz bei kurzzeitigen operativen Abfragen zu erreichen, erhöhen Sie die Anzahl der Serverknoten, indem Sie ein Multi-Cluster Warehouse verwenden, anstatt die Computeressource mit einem größeren Warehouse zu vergrößern.
Wenn Ihre Workload variable Durchsatzmuster aufweist, können Sie die automatische Skalierung aktivieren, um den Verbrauch zu reduzieren, wenn der Bedarf geringer ist. Stellen Sie die Skalierungsrichtlinie auf Standard
und nicht auf Economy
ein, um die beste Leistung und Effizienz bei Workloads zu erzielen, die einen hohen Durchsatz oder eine geringe Latenzzeit erfordern. Weitere Informationen dazu finden Sie unter Einstellen der Skalierungsrichtlinie für ein Multi-Cluster-Warehouse.
In einigen Fällen kann es von Vorteil sein, Workloads in separaten Warehouses zu isolieren, um eine unabhängige Skalierung zu ermöglichen. Wenn Sie eine gemischte hybride Workload mit operativen und analytischen Komponenten haben, ist es von Vorteil, die operativen und analytischen Komponenten in verschiedene Warehouses aufzuteilen. Wenn Sie die Abfragen nicht trennen können und sie gemeinsam im selben Warehouse ausführen müssen, wählen Sie die Größe des Warehouse auf der Grundlage der Anforderungen an die Latenzzeit der analytischen Abfragen und die Anzahl der Multi-Cluster-Knoten auf der Grundlage der Anforderungen an den Durchsatz Ihrer Workload.
Zwischenspeichern und Aufwärmen¶
Die erste Hybridtabellenabfrage, die an ein neu gestartetes Warehouse ausgegeben wird, löst Aktivitäten wie Abfrageplanung, Indexauswahl, E/A zum Laden von Daten, Caching-Entscheidungen und natürlich die Abfrageausführung aus. Die Abfrage-Engine optimiert weiterhin den Arbeitsspeicher und den Speicher für die Abfrage. Diese Zeit wird als „Aufwärmphase“ bezeichnet. Die Abfrage-Latenzzeit sinkt, bis die Engine zu einer stabilen Latenz konvergiert.
Verwenden Sie dedizierte Warehouses für Hybridtabellen-Workloads, um Cache-Interferenzen zu vermeiden.
Sie sollten sich darüber im Klaren sein, dass das Erreichen einer stabilen Latenzzeit zwischen einigen Sekunden und 2–3 Minuten dauert, während sich der Cache aufwärmt.
Konfigurieren Sie Auto-Suspend und Auto-Scaling, um Effizienz und Cache-Wärme auszugleichen.
Hybridtabellen verwenden mehrere Caching-Ansätze, um die Leistung zu optimieren. Der Plan-Cache reduziert den Kompilierungs-Overhead, indem er häufig verwendete Abfragepläne speichert. Der Datencache des Spaltenspeichers verwaltet häufig abgerufene Daten im Speicher, und der Metadatencache bietet schnellen Zugriff auf Tabellen- und Indexinformationen. Hybridtabellen verwenden keinen Ergebnis-Cache.
Diese Caches benötigen etwas Zeit, um für Ihre Workload-Muster optimiert zu werden. Die Verwendung dedizierter Warehouses für Hybridtabellen-Workloads verhindert Cache-Interferenzen mit anderen Workloads. Bei den ersten Abfragen nach einem Kaltstart kommt es zu einer höheren Latenz, bis die Caches aufgefüllt sind. Wenn Ihre Workload variable Durchsatzmuster aufweist, können Sie die automatische Skalierung und die automatische Aussetzung aktivieren, um den Verbrauch zu reduzieren oder Ihr Warehouse auszusetzen, wenn die Nachfrage geringer ist. Wenn Ihr Warehouse neu startet oder automatisch skaliert, um einen neuen Cluster hinzuzufügen, müssen die Caches rehydriert werden. Stellen Sie die Skalierungsrichtlinie auf Standard
statt auf Economy
, um die beste Leistung zu erzielen. Siehe Multi-Cluster-Warehouses.
Gespeicherte Prozeduren und Hybridtabellen¶
Gespeicherte Prozeduren werden für Hybridtabellen unterstützt; jedoch bietet die Ausführung von Transaktionen mit aktiviertem AUTOCOMMIT oder von Transaktionen mit mehreren Anweisungen eine bessere Leistung und Effizienz als das Aufrufen einer gespeicherten Prozedur.
Serverlose Aufgaben und Hybridtabellen¶
Auch wenn serverlose Aufgaben unterstützt werden, sollten Sie sich darüber im Klaren sein, dass die Performance und Effizienz von Workloads, die Hybridtabellen verwenden, möglicherweise nicht optimal ist.
Überwachung der Leistung¶
Die empfohlene Ansicht für die Leistungsüberwachung von Hybridtabellen ist Ansicht AGGREGATE_QUERY_HISTORY. Diese Ansicht enthält Details zur Ausführung von Abfragen, die über einen kurzen Zeitraum aggregiert wurden.
Zum Beispiel, um die durchschnittliche Standardintervallleistung der letzten 24 Stunden für ein Warehouse abzurufen, das Hybridtabellenabfragen bedient:
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.AGGREGATE_QUERY_HISTORY
WHERE warehouse_name = 'HYBRID_TABLES_WAREHOUSE'
AND query_type = 'SELECT'
AND interval_start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP());
Siehe Ansicht AGGREGATE_QUERY_HISTORY für weitere Beispiele.
Überwachung von Quoten und Drosselung¶
Hybridtabellen implementieren Quotenkontrollen auf Kontoebene sowohl für den Durchsatz von hybriden Speicher- als auch von Hybridtabellenanfragen. Diese Quoten sorgen für eine gleichbleibende Leistung bei allen Benutzern. Die voreingestellten Quoten sind für die meisten anfänglichen Implementierungen ausreichend, müssen aber möglicherweise angepasst werden, wenn die Workload wächst.
Überwachen Sie die Quote für Hybridtabellenanfragen mit Hilfe von Ansicht AGGREGATE_QUERY_HISTORY.
Überwachen Sie das Kontingent des Hybridspeichers mit Hilfe von Ansicht STORAGE_USAGE.
Hohe Drosselungsprozentsätze in Abfrageprofilen weisen darauf hin, dass Sie sich der Durchsatzgrenze nähern. Wenn Sie dauerhaft mehr als 70 % eines der beiden Kontingente ausschöpfen, sollten Sie proaktiv eine Erhöhung über den Snowflake Support beantragen.
Die Leistung von Hybridtabellen wird auch dann gedrosselt, wenn die Computernutzung im virtuellen Warehouse nicht hoch ist. Um Ihre Nutzung zu überwachen und festzustellen, ob eine Hybridtabelle gedrosselt wird, sehen Sie sich das Beispiel auf Ansicht AGGREGATE_QUERY_HISTORY an. Sie können aus der Spalte HYBRID_TABLE_REQUESTS_THROTTLED_COUNT
auch die Anzahl der gedrosselten Hybridtabellenanforderungen abrufen.
Weitere Informationen dazu finden Sie unter Kontingente und Drosselung.
Fehlerbehebung bei Leistungsproblemen¶
Wenn Sie nach der Implementierung dieser bewährten Verfahren nicht die erwartete Leistung erzielen, kann der Snowflake Support Ihnen helfen, Ihre Implementierung zu analysieren und zu optimieren. Wenn Sie einen Support-Fall erstellen, sollten Sie die folgenden Informationen angeben, um eine schnelle Lösung zu ermöglichen:
Abfrage-IDs (UUIDs) für repräsentative Abfragen mit suboptimaler Leistung
Merkmale der Workload:
Typische Abfrage-Muster
Erwartete versus tatsächliche Latenz
Anforderungen an die Gleichzeitigkeit
Datenspeicher-Volumen
Zeilengröße der Abfrageantwort
Spalte Kardinalitätsschätzungen
Jüngste Änderungen an Tabellenschemata, Indizes oder Workload-Mustern
Drosselungsmetriken aus Abfrageprofilen
Leistungsunterschiede zwischen kalten und warmen Warehouses
Fügen Sie nach Möglichkeit sowohl schnelle als auch langsame Beispiele ähnlicher Abfragen ein, um Optimierungsmöglichkeiten zu identifizieren. Dieser Vergleich hilft den Support-Teams bei der schnellen Identifizierung potenzieller Konfigurations- oder Designverbesserungen.