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.
![Visualisierung von "scale up" Ein Medium Warehouse (vier Nodes) wird via manueller, vertikaler Skalierung zu einem Large Warehouse (acht Nodes).](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Warehouse_manuelle_vertikale_Skalierung.webp?resize=759%2C518&ssl=1)
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.
![Visualisierung von "scale out" Ein Multi-Cluster-Warehouse, das ein Medium-Cluster (vier Nodes) enthält, wird via horizontaler Skalierung zu einem Multi-Cluster-Warehouse, das zwei Medium-Cluster enthält.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Warehouse_automatisches_horizontales_Skalieren.webp?resize=737%2C515&ssl=1)
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.
![Links: Ein Rechteck, das zwei Quadrate mit je vier Zahnrädern, insgesamt also acht Zahnräder enthält. Es repräsentiert ein Multi-Cluster-Warehouse in Snowflake, das zwei Medium-Cluster enthält.
Alle Zahnräder in diesem Rechteck sind grau, um zu symbolisieren, dass das Warehouse "suspended" ist.
Rechts: Ein Rechteck, das zwei Quadrate mit je vier Zahnrädern, insgesamt also acht Zahnräder enthält. Es repräsentiert auch ein Multi-Cluster-Warehouse, das zwei Medium-Cluster enthält.
In einem Quadrat sind alle vier Zahnräder grau, um zu symbolisieren, dass dieses Cluster "suspended" ist.
Im anderen Quadrat sind alle Zahnräder grün, um zu symbolisieren, dass dieses Cluster im Status "running" ist.
Der rechte Bildteil zeigt einen in Snowflake nicht möglichen Zustand, deshalb ist er von einem roten "X" durchgestrichen.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Anhalten_eines_Multi_Cluster_Warehouses-1.webp?resize=676%2C593&ssl=1)
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.
![Visualisierung von Parallelität in Multi-Cluster-Warehouse Links sieht man ein Large Warehouse (8 Knoten), bei dem ein Query eingeht und ein zweiter in der Warteschlange steht. Rechts sieht man ein Multi-Cluster-Warehouse, das zwei Medium Warehouses enthält. Die beiden Querys werden hier parallel - jeweils von einem der Medium Warehouses - verarbeitet.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Scaling_out_verbessert_concurrency.webp?resize=869%2C490&ssl=1)
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.
![Visualisierung Multi-Cluster-Warehouse Links ein Multi-Cluster-Warehouse mit zwei Medium Warehouses. Rechts, durchgestrichen von einem roten "X", ein Multi-Cluster-Warehouse mit einem Small Warehouse und einem Medium Warehouse. Durchgestrichen, da so etwas in Snowflake nicht möglich ist.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_No_different_sized_Warehouses_within_Multicluster_Warehouse.webp?resize=637%2C567&ssl=1)
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.
![Visualisierung: Simpler Query in großem Warehouse Von den 8 Zahnrädern, welche die 8 Knoten des Large Warehouses repräsentieren, wird eines, das durch blaue Farbe hervorgehoben ist, von einem Pfeil umrundet. Der Pfeil symbolisiert den Query, der nur einen Knoten benötigt.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Ein_groseres_Warehouse_resultiert_nicht_immer_in_schnellere_Querys.webp?resize=535%2C514&ssl=1)
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.
![Visualisierung: "Scale up", während ein Query verarbeitet wird. Links: Ein Pfeil, der einen Query repräsentiert, umrundet alle vier Zahnräder eines Medium Warehouses. Das soll darstellen, dass dieser Query gerade verarbeitet wird. Die Zahnräder repräsentieren die vier Knoten.
Rechts: Das selbe Warehouse wurde vergrößert und hat nun 8 Zahnräder, also 8 Knoten. Der selbe Query umrundet weiterhin nur die selben 4 Zahnräder, denn die Vergrößerung (vertikale Skalierung) wurde manuell ausgeführt, während der Query schon vom Warehouse verarbeitet wurde.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Das_vertikale_Skalieren_eines_Warehouses_hat_keinen_Einfluss_auf_einen_bereits_laufenden_Query.webp?resize=862%2C520&ssl=1)
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.
![Visualisierung von Parallelität in Multi-Cluster-Warehouses Links sieht man zwei Medium Warehouses (jeweils 4 Knoten). Beim oberen Warehouse geht ein Query ein und ein zweiter steht in der Warteschlange.
Rechts sieht man ein Multi-Cluster-Warehouse, das zwei Medium Warehouses enthält. Die beiden Querys werden hier parallel - jeweils von einem der Medium Warehouses - verarbeitet.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snwoflake_Eingehende_Querys_werden_nicht_automatisch_an_ein_freies_Warehouse_weitergeleitet.webp?resize=870%2C475&ssl=1)
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.
![Visualisierung: Parallelität in einem virtuellen Warehouse, das kein Multi-Cluster-Warehouse ist Von den 8 Zahnrädern, welche die 8 Knoten des Large Warehouses repräsentieren, werden vier, die durch blaue Farbe hervorgehoben sind, von einem Pfeil, der mit "Query 1" beschriftet ist, umrundet. Dieser Pfeil symbolisiert den Query, der vier Knoten benötigt.
Zwei weitere Zahnräder, ebenfalls blau hervorgehoben, werden von einem Pfeil, der mit "Query 2" beschriftet ist, umrundet. Dieser Pfeil symbolisiert den Query, der zwei Knoten benötigt.
Zwei Zahnräder sind grün und werden von keinem Pfeil umrundet. Sie symbolisieren die noch unbenutzten Computeressourcen.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Auch_ein_Single_Cluster_Warehouse_kann_mehrere_Querys_parallel_verarbeiten.webp?resize=471%2C631&ssl=1)
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.
![Visualisierung von "scale out" Links: Ein Quadrat, das vier Zahnräder enthält. Es repräsentiert ein Multi-Cluster-Warehouse, das ein Medium-Cluster (vier Knoten) enthält.
Rechts: Ein Rechteck, das acht Zahnräder enthält. Es repräsentiert ein Multi-Cluster-Warehouse, das zwei Medium-Cluster enthält.
Vom linken Multi-Cluster-Warehouse ausgehend, zeigt ein Pfeil auf das rechte Multi-Cluster-Warehouse.
Er ist beschriftet mit "Automatisches horizontales Skalieren".](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Warehouse_automatisches_horizontales_Skalieren-1.webp?resize=777%2C544&ssl=1)
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.
![Visualisierung: Nur ein Cluster pro Query Links: Ein Quadrat, das vier Zahnräder enthält. Es repräsentiert ein virtuelles Warehouse mit vier Knoten.
Ein Pfeil, der dicker ist als die Pfeile in anderen Bildern, um einen komplexen Query zu symbolisieren, zeigt von links auf das Quadrat. Dies symbolisiert, dass der Query eingeht und von dem virtuellen Warehouse verarbeitet wird.
Rechts: Ein Rechteck, das zwei Quadrate mit je vier Zahnrädern, insgesamt also acht Zahnräder enthält. Es repräsentiert ein Multi-Cluster-Warehouse, das zwei Medium-Cluster enthält.
Ein Pfeil, der dicker ist als die Pfeile in anderen Bildern, um einen komplexen Query zu symbolisieren, zeigt von links auf eines der vier Zahnräder enthaltenden Quadrate. Dies symbolisiert, dass der Query eingeht und von einem Medium Warehouse des Multi-Cluster-Warehouses verarbeitet wird.](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Ein_Multi_Cluster_Warehouse_verarbeitet_einen_komplexen_Query_nicht_schneller.webp?resize=804%2C516&ssl=1)
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.
![Visualisierung: Nur ein Cluster pro Query Links: Ein Rechteck, das zwei Quadrate mit je vier Zahnrädern, insgesamt also acht Zahnräder enthält. Es repräsentiert ein Multi-Cluster-Warehouse in Snowflake, das zwei Medium-Cluster enthält.
Ein Pfeil mit der Aufschrift "Query 1" zeigt von links auf eines der - vier Zahnräder enthaltenden - Quadrate. Dies symbolisiert, dass der Query eingeht und von einem Medium Warehouse des Multi-Cluster-Warehouses verarbeitet wird.
Rechts: Ein Rechteck, das zwei Quadrate mit je vier Zahnrädern, insgesamt also acht Zahnräder enthält. Es repräsentiert auch ein Multi-Cluster-Warehouse, das zwei Medium-Cluster enthält.
Ein Pfeil mit der Aufschrift "Query 1" spaltet sich auf und zeigt von links auf beide der - vier Zahnräder enthaltenden - Quadrate. Dies symbolisiert, dass der Query eingeht und von beiden Medium Warehouses des Multi-Cluster-Warehouses verarbeitet wird. Da dies in Snowflake nicht möglich ist, ist der rechte Bildteil von einem roten "X" durchgestrichen,](https://i0.wp.com/saracus.com//wp-content/uploads//2022/10/Snowflake_Ein_Query_kann_nur_von_einem_Warehouse_verarbeitet_werden.webp?resize=765%2C483&ssl=1)
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.