Das Konzept des „virtuellen Warehouses“ mag bei Snowflake-Einsteigern für etwas Verwirrung sorgen. Eine Verwechslung zwischen den Arten der Warehouse-Skalierung kann sich auch in Äußerungen fortgeschrittener Nutzer einschleichen. Snowflake unterstützt zwei Arten der Skalierung: vertikal und horizontal – und beide dienen einem unterschiedlichen Zweck. Es folgt eine Sammlung typischer Irrtümer (die Überschriften beschreiben Falschaussagen!), die einem im Lernprozess unterlaufen können. Dieser Beitrag ist somit vor allem für Leser gedacht, die sich schon etwas mit der Snowflake-Architektur vertraut gemacht haben.
1. Virtuelle Warehouses können dynamisch vergrößert oder verkleinert werden.
Die Größe von virtuellen Warehouses ( im Folgenden nur noch Warehouses genannt) kann manuell verändert werden, auch wenn bereits Querys laufen oder Querys in der Warteschlange sind. Der Modus „Automatische Skalierung“ steht für vertikales Skalieren eines Warehouses (scale up/down) nicht zur Verfügung.
Auto-Skalierung steht in der Enterprise Edition von Snowflake für horizontale Skalierung, also dem Vergrößern/Verkleinern der Anzahl an (gleichgroßen!) Clustern in einem Multi-Cluster-Warehouse, zur Verfügung.
Für ein Multi-Cluster-Warehouse (MCW) wird Auto-Skalierung aktiviert, wenn unterschiedliche Werte für die maximale und minimale Anzahl von Clustern angegeben werden. In diesem Modus startet und stoppt Snowflake Cluster nach Bedarf, um die Verarbeitungslast im MCW dynamisch zu verwalten:
- Wenn die Anzahl der gleichzeitigen Benutzersitzungen und/oder Abfragen für das MCW zunimmt und Abfragen aufgrund unzureichender Ressourcen in die Warteschlange treten, startet Snowflake automatisch zusätzliche Cluster bis zu der für das Warehouse festgelegten maximalen Anzahl.
- Wenn die Auslastung des MCW abnimmt, fährt Snowflake die Cluster automatisch herunter, um die Anzahl der aktiven Cluster und entsprechend die Anzahl der vom MCW verbrauchten Credits zu reduzieren.
Um die Credit-Nutzung im automatischen Skalierungsmodus zu steuern, bietet Snowflake die Eigenschaft SCALING_POLICY an. Diese bestimmt die Skalierungsrichtlinie, die beim automatischen Starten oder Herunterfahren zusätzlicher Cluster verwendet wird.
2. Einzelne Cluster eines Multi-Cluster-Warehouses können angehalten werden.
Es ist möglich, die Anzahl der Cluster in einem Multi-Cluster-Warehouse via „scale down“ zu reduzieren, das Anhalten einzelner Cluster jedoch nicht. Das Anhalten eines Multi-Cluster-Warehouses fährt alle zugehörigen Computeressourcen herunter und es werden keine Credits mehr verbraucht.
Wird ein Warehouse angehalten, fährt Snowflake sofort alle im Leerlauf befindlichen Computeressourcen des Warehouses herunter, lässt jedoch zu, dass alle Computeressourcen, die Anweisungen ausführen, so lange fortgesetzt werden, bis die Anweisungen abgeschlossen sind. Dann werden auch diese Ressourcen heruntergefahren, und der Status des Warehouse wird in „Suspended“ geändert.
3. Das Vergrößern eines Warehouses verbessert Parallelität, also das gleichzeitige Ausführen von Querys.
Snowflake unterstützt zwei Arten der Skalierung von Warehouses:
- Vertikales Skalieren durch Ändern der Größe eines Warehouse.
Das Vergrößern eines Warehouses verbessert die Performance, besonders für große, komplexe Querys. - Horizontales Skalieren durch Hinzufügen von Clustern zu einem Multi-Cluster-Warehouse (erfordert Snowflake Enterprise Edition oder höher).
Multi-Cluster-Warehouses verbessern Parallelität. Sie wurden speziell dafür entwickelt, Warteschlangen- und Performance-Probleme zu lösen, die aus einer großen Anzahl gleichzeitiger Nutzer und/oder Anfragen resultieren.
Das obige linke Warehouse mit acht Knoten (Large) wird Query 1 wahrscheinlich schneller verarbeiten als eines der rechten Warehouses mit vier Knoten (Medium). Wenn Query 1 und Query 2 jedoch zum selben Zeitpunkt ausgeführt werden, dann wird Query 2 wahrscheinlich zunächst auf die Verarbeitung von Query 1 warten. Ein Multi-Cluster-Warehouse kann jedoch instantan beide Querys parallel ausführen.
4. Ein Multi-Cluster-Warehouse kann aus Warehouses verschiedener Größen bestehen.
Wenn ein Multi-Cluster-Warehouse erstellt wird, müssen alle individuellen Cluster dieselbe Anzahl an Knoten haben.
5. Ein größeres Warehouse wird einen Query schneller ausführen.
Möglich, aber dem ist nicht zwingend so. Ein simpler Query braucht gegebenenfalls nur einen Knoten; zudem spielen andere Faktoren eine Rolle. Um zu vermeiden, dass Querys in einer Umgebung mit vielen Nutzern in die Warteschlange gestellt werden, sollte ein Multi-Cluster-Warehouse angelegt werden, nicht ein größeres Warehouse.
Zudem: Ein Query, den ein Warehouse mit all seinen verfügbaren Computeressourcen verarbeitet, wird nicht doppelt so schnell laufen, wenn die Größe dieses Warehouses verdoppelt wird. Warehouses haben abnehmenden Grenznutzen, besonders im XL-Bereich.
6. Das Vergrößern eines Warehouses verbessert die Performance eines aktuell langsam laufenden Querys.
Virtuelle Warehouses können jederzeit vergrößert werden, aber dies hat keinen Einfluss auf bereits laufende Querys. Sobald die neuen Computeressourcen bereitgestellt sind, stehen sie zur Verfügung für Querys, die in der Warteschlange stehen oder neu ausgeführt werden.
7. Eingehende Querys werden automatisch an ein beliebiges, freies und verfügbares Warehouse weitergeleitet.
Jeder Query wird von nur einem Warehouse verarbeitet, welches über die aktuelle Sitzung definiert ist – via USE WAREHOUSE oder als Standardwarehouse des aktuellen Users. Die Option der automatischen Weiterleitung an ein anderes Warehouse existiert nicht, der Prozess ist stets manuell.
Mit der Enterprise Edition von Snowflake ist es möglich, in einem Multi-Cluster-Warehouse neue Cluster zu starten, um Querys zu verarbeiten, die in der Warteschlange stehen.
Das oben stehende Bild könnte zu folgender Falschannahme verleiten:
8. Ein Query wird immer in die Warteschlange gestellt, wenn das Warehouse beschäftigt ist.
Auch bei Single-Cluster-Warehouses ist die Anzahl der Querys, die parallel verarbeitet werden können, abhängig von der Größe und Komplexität eines jeden Querys. Wenn Querys abgeschickt werden, berechnet und reserviert das Warehouse die benötigten Computeressourcen, die je Query nötig sind. Nur falls dem Warehouse nicht genügend Computeressourcen verbleiben, um einen Query zu verarbeiten, wird dieser Query in die Warteschlange gestellt – solange bis andere laufende Querys abschließen und Ressourcen frei werden.
Um vollautomatisiertes Skalieren zwecks Parallelität zu aktivieren, empfiehlt Snowflake Multi-Cluster-Warehouses: Querys, die normalerweise in die Warteschlange gestellt würden, werden automatisch umgeleitet und ausgeführt von einem anderen Cluster im selben Warehouse – ohne manuelles Eingreifen.
9. Multi-Cluster-Warehouses können zwischen einer minimalen und maximalen Anzahl an Knoten skalieren.
Die – bei Erstellung eines MCW konfigurierbaren – Parameter MAX_CLUSTER_COUNT und MIN_CLUSTER_COUNT (Werte zwischen 1 und 10) beziehen sich auf die Anzahl der Einzel-Cluster-Warehouses, nicht die Anzahl der Serverknoten. Jedes Cluster in einem virtuellen Warehouse muss dieselbe Anzahl an Serverknoten haben, sprich, dieselbe „Größe“ haben.
10. Ein Multi-Cluster-Warehouse hilft, einen komplexen Query schneller zu verarbeiten.
Multi-Cluster-Warehouses helfen dabei, viele Querys parallel zu verarbeiten. Ein singulärer Query wird immer von einem singulären Warehouse verarbeitet, ergo spielt nur die Größe eine Rolle, nicht die Anzahl der Cluster. Die Performance eines komplexen Querys könnte durch ein größeres Warehouse profitieren. Eine große Anzahl von Clustern ist in diesem Fall egal.
11. Ein Query kann von mehr als einem Warehouse verarbeitet werden
Ein Query kann nur von einem virtuellen Warehouse verarbeitet werden. Bevor Abfragen und DML-Anweisung in einer laufenden Sitzung ausgeführt werden können, muss stets ein Warehouse angegeben werden (DDL USE WAREHOUSE … oder via Snowsight GUI). Dieses Warehouse wird so lange alle Querys ausführen, bis ein neues Warehouse angegeben und ausgeführt wird. Es ist jedoch möglich, dass ein Query von einem anderen Cluster in diesem virtuellen Warehouse ausgeführt wird, sofern es ein Multi-Cluster-Warehouse ist. Es ist nicht möglich zu bestimmen, welches Cluster das ist, aber Querys in der Warteschlange können einem anderen aktiven Cluster zugeteilt werden, wenn die übrigen Cluster gerade belegt sind.
Snowflake und saracus consulting
An dieser Stelle ein wenig Eigenwerbung zu unseren kommenden „Snowflake-Monaten“. Wir bieten regelmäßig kostenlose Snowflake Basic und Advanced Webinare an, in welchen wir Snowflake und seine Eigenarten vorstellen sowie Best Practices und Lösungen präsentieren. Die beiden Webinare sind auch als ausführliches Seminar buchbar, welche erheblich detaillierter sind.