Workloads von Hybridtabellen überwachen¶
Unistore-Workloads, die Hybridtabellen nutzen, unterscheiden sich von vielen analytischen Workloads, die Sie in Snowflake ausführen. So können Ihre Arbeitslasten beispielsweise weniger eindeutige Abfragen enthalten, die weniger Zeit in Anspruch nehmen und häufiger ausgeführt werden. Sie haben mehrere Optionen, um Ihre Workloads zu überwachen.
Transaktionen überwachen¶
Hybridtabellen unterstützen Snowflake-Features zur Transaktionsüberwachung, einschließlich SHOW TRANSACTIONS, DESCRIBE TRANSACTION, SHOW LOCKS und LOCK WAIT HISTORY.
Das Verhalten dieser Befehle und Ansichten für Hybridtabellen ist mit dem Verhalten für Standard-Snowflake-Tabellen konsistent, mit Ausnahme der folgenden Abweichungen:
Ein neuer
ROW
-Sperrtyp wird im SHOW LOCKS-Befehl eingeführt, um Zeilensperren auf Hybridtabellen darzustellen. Die Sperren werden zusammengefasst, um zu zeigen, dass eine Transaktion (eine oder mehrere) Zeilensperren hält und eine andere Transaktion auf diese Sperren wartet.LOCK WAIT HISTORY zeigt keine schemabezogenen Informationen an.
LOCK_WAIT_HISTORY bietet keine Zusammenfassung von BLOCKER_QUERIES. Wenn eine Abfrage durch mehrere Blockierungen blockiert wird, wird sie in der Ansicht als mehrere Datensätze angezeigt und nicht als mehrere Einträge im BLOCKER_QUERIES-JSON-Array für den einzelnen Wartedatensatz.
Für das Ergebnis von SHOW LOCKS und die Ansicht LOCK_WAIT_HISTORY gilt Folgendes:
Da die Zeilensperren zusammengefasst werden, wird davon ausgegangen, dass die sperrende Transaktion die Sperre erwirbt, wenn sie beginnt.
Aufgrund des potenziell hohen Volumens von Unistore-Transaktionen werden nur Sperren angezeigt, die andere Transaktionen für einen längeren Zeitraum (etwa 5 Sekunden) blockiert haben.
Es kann sein, dass die sperrende Transaktion immer noch auf die Sperren zu warten scheint, auch wenn sie diese bereits erworben hat (nicht länger als 1 Minute). Die Genauigkeit der Sperrmeldungen wird sich in zukünftigen Releases verbessern.
Wenn eine Anweisung, die eine wartende Abfrage blockiert hat, abgeschlossen wurde und eine kurz laufende Abfrage gegen Hybridtabellen war, werden die folgenden Informationen für die blockierende Abfrage nicht im Feld BLOCKER_QUERY des Datensatzes der wartenden Abfrage angezeigt:
Abfrage-UUID der Blockierungsabfrage
Sitzungs-ID der Blockierungsabfrage
Benutzername der Blockierungsabfrage
Datenbank-ID der Blockierungsabfrage
Datenbankname der Blockierungsabfrage
Workloads überwachen¶
Um Ihre betrieblichen Workloads effektiv zu überwachen, verwenden Sie die Ansicht Ansicht AGGREGATE_QUERY_HISTORY. Mit dieser Ansicht können Sie den Zustand Ihres Workloads überwachen, Probleme diagnostizieren und Optimierungsmöglichkeiten erkennen. Die AGGREGATE_QUERY_HISTORY-Ansicht aggregiert Abfrageausführungsstatistiken für eine wiederholte parametrisierte Abfrage über ein Zeitintervall, sodass es einfacher und effizienter ist, Muster in Ihren Workloads und Abfragen im Laufe der Zeit zu erkennen. Beachten Sie, dass alle Snowflake-Workloads und -Abfragen in der Ausgabe dieser Ansicht kombiniert werden.
Die Ansicht AGGREGATE_QUERY_HISTORY hilft Ihnen, die folgenden Fragen zu Ihren Workloads zu beantworten:
Wie viele Operationen werden pro Sekunde in meinem virtuellen Warehouse ausgeführt?
Welche Abfragen in meinem Workload benötigen insgesamt die meiste Zeit oder verbrauchen die meisten Ressourcen?
Hat sich die Performance einer bestimmten Abfrage im Laufe der Zeit wesentlich verändert?
Um die Performance und Effizienz Ihres Workloads zu verbessern, werden einzelne Ausführungen von Operationen mit geringer Latenz (unter einer Sekunde) weder in der Ansicht QUERY_HISTORY gespeichert, noch generieren sie ein eindeutiges Abfrageprofil (Query Profile). Stattdessen werden die aggregierten Statistiken für wiederholte Ausführungen dieser Abfrage in der Ansicht AGGREGATE_QUERY_HISTORY zurückgegeben. Sie können auch ein gesampeltes Query Profile für die Abfrage über ein ausgewähltes Zeitintervall anzeigen. Weitere Informationen zu dieser Verhaltensweise finden Sie unter Nutzungshinweise.
Tipp
Sie können die Ansicht Gruppierter Abfrageverlauf in Snowsight verwenden, um die Leistung und die Statistiken für typische Hybridtabellen-Workloads zu visualisieren. Diese Ansicht erfasst nicht die gesamte Aktivität der Hybridtabelle, aber sie bietet eine gute Alternative zur Überwachung der Leistung für eine große Menge einzelner Abfragen, die sich etwas wiederholen und extrem schnell laufen.
Allgemeinen Zustand des Workloads überwachen¶
Verwenden Sie die Ansicht AGGREGATE_QUERY_HISTORY, um den Gesamtdurchsatz und die Parallelität Ihres Workloads zu überwachen und um unerwartete Spitzen oder Rückgänge in Ihren Workloads zu untersuchen. Beispiel:
SELECT
interval_start_time
, SUM(calls) as execution_count
, SUM(calls) / 60 as queries_per_second
, COUNT(DISTINCT session_id) as unique_sessions
, COUNT(user_name) as unique_users
FROM snowflake.account_usage.aggregate_query_history
WHERE warehouse_name = '<MY_WAREHOUSE>'
AND interval_start_time > $START_DATE
AND interval_start_time < $END_DATE
GROUP BY ALL;
Sie können auch den aggregierten Abfrageverlauf (Query History) verwenden, um potenzielle Probleme mit Fehlern, Warteschlangen, Blockieren durch Sperren oder Drosselung zu überwachen. Beispiel:
WITH time_issues AS
(
SELECT
interval_start_time
, SUM(transaction_blocked_time:"SUM") as transaction_blocked_time
, SUM(queued_provisioning_time:"SUM") as queued_provisioning_time
, SUM(queued_repair_time:"SUM") as queued_repair_time
, SUM(queued_overload_time:"SUM") as queued_overload_time
, SUM(hybrid_table_requests_throttled_count) as hybrid_table_requests_throttled_count
FROM snowflake.account_usage.aggregate_query_history
WHERE WAREHOUSE_NAME = '<MY_WAREHOUSE>'
AND interval_start_time > $START_DATE
AND interval_start_time < $END_DATE
GROUP BY ALL
),
errors AS
(
SELECT
interval_start_time
, SUM(value:"count") as error_count
FROM
(
SELECT
a.interval_start_time
,e.*
FROM
snowflake.account_usage.aggregate_query_history a,
TABLE(flatten(input => errors)) e
WHERE interval_start_time > $START_DATE
AND interval_start_time < $END_DATE
)
GROUP BY ALL
)
SELECT
ts.interval_start_time
, error_count
, transaction_blocked_time
, queued_provisioning_time
, queued_repair_time
, queued_overload_time
, hybrid_table_requests_throttled_count
FROM time_issues ts
FULL JOIN errors e ON e.interval_start_time = ts.interval_start_time
;
In der Regel sollten diese Kennzahlen niedrig bleiben. Wenn Sie einen unerwarteten Spitzenwert feststellen, sollten Sie die Ursache untersuchen.
Wiederholte Abfragen identifizieren und untersuchen¶
Sie können sich dafür entscheiden, die Leistung von häufig ausgeführten Abfragen zu optimieren oder zu untersuchen, um die Effizienz Ihres Workload zu verbessern. Sie können die Ansicht AGGREGATE_QUERY_HISTORY verwenden, um die wichtigsten Abfragen eines Workloads nach Ausführungsanzahl zu identifizieren. Beispiel:
SELECT
query_parameterized_hash
, any_value(query_text)
, SUM(calls) as execution_count
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = '<MY_WAREHOUSE>'
AND interval_start_time > '2024-02-01'
AND interval_start_time < '2024-02-08'
GROUP BY
query_parameterized_hash
ORDER BY execution_count DESC
;
Sie können sich die Kennzahlen für die langsamsten Abfragen anzeigen lassen. Beispiel:
SELECT
query_parameterized_hash
, any_value(query_text)
, SUM(total_elapsed_time:"sum"::NUMBER) / SUM (calls) as avg_latency
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND warehouse_name = '<MY_WAREHOUSE>'
AND interval_start_time > '2024-02-01'
AND interval_start_time < '2024-02-08'
GROUP BY
query_parameterized_hash
ORDER BY avg_latency DESC
;
Sie können die Leistung einer bestimmten Abfrage im Laufe der Zeit analysieren, um einen Einblick in Trends bei den Latenzen zu erhalten. Beispiel:
SELECT
interval_start_time
, total_elapsed_time:"avg"::number avg_elapsed_time
, total_elapsed_time:"min"::number min_elapsed_time
, total_elapsed_time:"p90"::number p90_elapsed_time
, total_elapsed_time:"p99"::number p99_elapsed_time
, total_elapsed_time:"max"::number max_elapsed_time
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
AND query_parameterized_hash = '<123456>'
AND interval_start_time > '2024-02-01'
AND interval_start_time < '2024-02-08'
ORDER BY interval_start_time DESC
;
Diese Abfrage berechnet die Abfragegesamtzeit. Sie können die Abfrage auch ändern, um detailliertere Kennzahlen zu den verschiedenen Phasen einer Abfrage (Kompilierung, Ausführung, Warteschlangenbildung und Sperren) zu erhalten. Für jede Phase werden aggregierte Statistiken zurückgegeben.