Kontrollieren den Kosten

Dieses Thema befasst sich mit den Kontrollelementen, die Sie verwenden können, um die Nutzung von virtuellen Warehouses zu begrenzen. Mithilfe dieser Kontrollelemente können Sie sicherstellen, dass die tatsächlichen Kosten der Nutzung virtueller Warehouses die erwarteten Kosten nicht übersteigen.

Diese Kontrollelemente gelten nicht für Clouddienste und serverlose Features.

Unter diesem Thema:

Zugriff auf Warehouses steuern

Eine genaue Definition, wer mit Warehouses arbeiten darf und was diese Personen mit diesen Warehouses tun können, trägt zur Kostenkontrolle bei, indem die Nutzung von Computeressourcen auf bekannte Warehouses mit kosteneffizienten Konfigurationen beschränkt wird. Snowflake bietet eine detaillierte Zugriffssteuerung, mit der Sie die folgenden Berechtigungen für Warehouses erteilen können:

  • CREATE WAREHOUSE – Globale Berechtigung (d. h. wird dem Konto erteilt) zur Einschränkung der Rollen, die ein neues Warehouse erstellen können. Damit können Sie erzwingen, dass Einzelpersonen bestehende Warehouses verwenden, für die eine Kostenkontrolle besteht.

  • MODIFY – Berechtigung für ein bestimmtes Warehouse zur Änderung von Einstellungen, die sich auf die Kosten auswirken, einschließlich der Größenänderung eines Warehouses und der Deaktivierung des automatischen Anhaltens. Häufig erhöhen Benutzer die Größe eines Warehouses, um einen bestimmten Workload zu verarbeiten, und vergessen danach, das Warehouse wieder auf die ursprüngliche Größe zurückzusetzen, was erhebliche Auswirkungen auf die Kosten haben kann.

  • USAGE – Berechtigung für ein bestimmtes Warehouse, das die Aktivierung des Warehouses zur Bereitstellung von Computeressourcen für Abfragen und andere SQL-Aktionen erlaubt. Durch das sorgfältige Zuweisen dieser Berechtigung wird sichergestellt, dass Benutzer nur Warehouses mit der für ihren Workload geeigneten Größe und Konfiguration verwenden können.

Die Zentralisierung der Verantwortung für das Erstellen und Skalieren von Warehouses auf einige wenige Mitglieder Ihres Teams gilt als bewährte Praxis. Sie können eine spezielle Rolle mit der Berechtigung zum Erstellen und Ändern aller Warehouses erstellen und diese Rolle dann einer begrenzten Anzahl von Benutzern zuweisen. Auf diese Weise können Sie Ihre Warehouse-Richtlinien kontrollieren und ungewollte Kostenüberschreitungen verhindern, die durch die unerwartete Einrichtung oder Vergrößerung von Warehouses entstehen.

Tipp

Wenn Sie die Möglichkeit zum Skalieren eines Warehouse haben möchten, um anspruchsvollere Workloads zu bewältigen, aber den Benutzern nicht die Möglichkeit geben möchten, die Größe eines Warehouses zu erhöhen, weil diese vergessen könnten, das Warehouse wieder zu verkleinern, sollten Sie ein Multi-Cluster-Warehouse verwenden. Bei einem Multi-Cluster-Warehouse wird die Größe bei schwankenden Workloads automatisch skaliert.

Eine Liste aller Berechtigungen, die für ein Warehouse festgelegt werden können, finden Sie unter Berechtigungen von virtuellen Warehouses.

Optimale Warehouse-Größe wählen

Die Größe des Warehouses bestimmt die maximale Anzahl der Credits, die in einer Stunde ausgegeben werden können. Ein kleines Warehouse kann zum Beispiel nicht mehr als 2 Credits pro Stunde verbrauchen. Eine vollständige Liste der Warehouse-Größen mit der maximalen Anzahl von Credits, die diese pro Stunde verbrauchen können, finden Sie unter Übersicht zu Warehouses.

Ein bewährtes Verfahren zur Kostenkontrolle besteht darin, verschiedene Warehouses für unterschiedliche Workloads zu verwenden, sodass Sie eine für jeden Workload geeignete Größe wählen können. Wenn Sie nicht sicher sind, welche Größe für das Warehouse am besten geeignet ist, beginnen Sie mit einer kleineren Größe, und erhöhen Sie diese langsam auf Basis von Workload-Performance und bestehendem SLA.

Weitere Informationen zur Auswahl des passenden Warehouses für einen Workload finden Sie unter Verwalten von Snowflake-Computeressourcen (Snowflake-Blogbeitrag).

Abfragezeiten begrenzen

Hängende Abfragen verbrauchen zu viele Credits, da ihre Ausführung länger dauert als erwartet. Um übermäßige Kosten durch eine aus dem Ruder gelaufene Abfrage zu verhindern, können Sie mit dem Parameter STATEMENT_TIMEOUT_IN_SECONDS eine maximale Ausführungsdauer für SQL-Anweisungen festlegen, nach der die Ausführung abgebrochen wird.

Der Parameter STATEMENT_TIMEOUT_IN_SECONDS kann für ein gesamtes Konto, für einen Benutzer, für eine Sitzung oder für ein bestimmtes Warehouse festgelegt werden, sodass Sie sorgfältig Zeitlimits festlegen können, die den erwarteten Laufzeiten der verschiedenen Workloads entsprechen. Dieser Parameter wird standardmäßig auf Kontoebene festgelegt. Wenn der Parameter nicht nur für die Sitzung, sondern auch für ein Warehouse festgelegt wird, wird der niedrigste Wert, der nicht Null ist, verwendet.

Verwenden Sie die folgenden Befehle, um die aktuellen Zeitlimits für Abfragen anzuzeigen:

SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
Copy

Wenn Sie die Zeitlimits anpassen müssen, verwenden Sie einen der folgenden Befehle:

ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
Copy

Wartezeit in Anweisungswarteschlange begrenzen

SQL-Anweisungen, die sich in einer Warteschlange für die Nutzung eines Warehouses befinden, verbrauchen keine Credits. Wenn eine Abfrage jedoch zu lange in der Warteschlange verbleibt, ist sie bei Ausführungsstart möglicherweise nicht mehr relevant. Das Ausführen von Abfragen, die nicht mehr relevant sind, bedeutet eine Vergeudung von Credits. Daher können Sie eine Kostenkontrolle implementieren, indem Sie eine maximale Zeitspanne festlegen, die eine SQL-Anweisung in der Warteschlange verbleiben kann, bevor sie abgebrochen wird.

Der Parameter, der die Dauer des Verbleibs einer SQL-Anweisung in der Warteschlange steuert, ist STATEMENT_QUEUED_TIMEOUT_IN_SECONDS. Der Parameter kann für ein gesamtes Konto, für einen Benutzer, für eine Sitzung oder für ein bestimmtes Warehouse festgelegt werden. Dieser Parameter wird standardmäßig auf Kontoebene festgelegt. Wenn der Parameter nicht nur für die Sitzung, sondern auch für ein Warehouse festgelegt wird, wird der niedrigste Wert, der nicht Null ist, verwendet.

Verwenden Sie die folgenden Befehle, um die aktuellen Zeitlimits für Warteschlangen anzuzeigen:

SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
Copy

Wenn Sie die Zeitlimits anpassen müssen, verwenden Sie einen der folgenden Befehle:

ALTER ACCOUNT SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
Copy

Automatisches Anhalten verwenden

Standardmäßig ist bei allen Warehouses die Einstellung für das automatische Anhalten aktiviert, d. h. ein Warehouse wird automatisch heruntergefahren, wenn es eine bestimmte Zeit lang inaktiv ist. Ein angehaltenes Warehouse verbraucht keine Credits, sodass dem Warehouse nur dann Kosten entstehen, wenn es einen Workload verarbeitet.

Indem Benutzer daran gehindert werden, die Einstellung für das automatische Anhalten zu deaktivieren, kann verhindert werden, dass Credits durch ein ungenutztes Warehouse verschwendet werden. Sie können die Zugriffssteuerung verwenden, um Personen die Nutzung eines Warehouses erlauben, diese Personen aber gleichzeitig daran hindern, die Einstellung für das automatische Anhalten zu ändern.

Abfrage: Warehouses ohne automatisches Anhalten suchen

Verwenden Sie die folgende Abfrage, um regelmäßig zu überprüfen, ob die Einstellung für das automatische Anhalten für alle Warehouses deaktiviert wurde.

SHOW WAREHOUSES
;

SELECT "name" AS WAREHOUSE_NAME
    ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE IFNULL("auto_suspend",0) = 0;
Copy

Um das automatische Anhalten für Warehouses zu aktivieren, bei denen die Funktion deaktiviert ist, öffnen Sie Snowsight, und navigieren Sie zu Admin » Warehouses. Sie können auch den Parameter AUTO_SUSPEND des Befehls ALTER WAREHOUSE verwenden.

Automatisches Anhalten mit automatischem Fortsetzen verwenden

Im Allgemeinen sollte in jedem Warehouse, bei dem das automatische Anhalten aktiviert ist, auch das automatische Fortsetzen aktiviert sein. Durch Kombination dieser beiden Einstellungen kann ein Warehouse bei schwankenden Workloads automatisch gestoppt und gestartet werden.

Abfrage: Warehouses ohne automatisches Fortsetzen suchen

Die folgende Abfrage listet die Warehouses auf, bei denen das automatische Fortsetzen nicht aktiviert ist, sodass Sie wissen, welche Warehouses geändert werden müssen.

SHOW WAREHOUSES
;

SELECT "name" AS WAREHOUSE_NAME
    ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "auto_resume" = 'false';
Copy

Um das automatische Fortsetzen für Warehouses zu aktivieren, bei denen die Funktion deaktiviert ist, öffnen Sie Snowsight, und navigieren Sie zu Admin » Warehouses. Sie können auch den Parameter AUTO_RESUME des Befehls ALTER WAREHOUSE verwenden.

Ausgabenlimits durchsetzen

Ressourcenmonitore bieten die Möglichkeit, Limits für die von einem Warehouse während eines bestimmten Zeitintervalls oder Datumsbereichs verbrauchten Credits festzulegen. Auf diese Weise kann verhindert werden, dass Warehouses ungewollt mehr Credits verbrauchen als normalerweise erwartet.

Manchmal benachrichtigt ein Ressourcenmonitor einfach einen Administrator, wenn ein Credit-Limit erreicht ist, aber Sie können ein Limit auch erzwingen, indem Sie einen Ressourcenmonitor so konfigurieren, dass ein Warehouse angehalten wird, sobald das Limit erreicht ist. Beim Erzwingen eines Limits gibt es zwei Optionen: das Warehouse anhalten, sobald alle ausstehenden Anweisungen ausgeführt wurden, oder sofort anhalten, ohne auf das Beenden der Anweisungen zu warten.

Da ein einzelner Ressourcenmonitor für mehrere Warehouses oder ein gesamtes Konto eingestellt werden kann, können Sie bei Erreichen eines Credit-Gesamtlimits effektiv mehrere Warehouses anhalten. Ein Warehouse kann gleichzeitig einem eigenen Ressourcenmonitor und einem kontospezifischen Ressourcenmonitor zugeordnet sein. Das Warehouse wird angehalten, sobald eine der beiden Credit-Limits erreicht ist.

Weitere Informationen zum Anhalten von Warehouses bei Erreichen von Credit-Limits finden Sie unter Verwenden von Ressourcenmonitoren.

Abfrage: Warehouses ohne Ressourcenmonitor

Die folgende Abfrage listet alles Warehouses auf, die keinem Warehouse-spezifischen Ressourcenmonitor zugewiesen wurden, wodurch sie anfällig für unkontrollierte Kosten sind. Beachten Sie, dass die Abfrage nicht nach Ressourcenmonitoren auf Kontoebene prüft. Für Warehouses in der Liste, die zu einem Konto mit einem Ressourcenmonitor auf Kontoebene gehören, gelten weiterhin Credit-Limits.

SELECT "name" AS WAREHOUSE_NAME
      ,"size" AS WAREHOUSE_SIZE
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE "resource_monitor" = 'null'
;
Copy

Bemerkung

Die Clouddiensteschicht der Snowflake-Architektur kann immer noch geringe Kosten verursachen, wenn Abfragen auf einem Warehouse ausgeführt werden, das von einem Ressourcenmonitor angehalten wurde.