Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Gebruik deze voorbeeldquery's voor SQL-query's met systeemtabellen om de prestaties, het gebruik en de kosten van SQL Warehouse te bewaken. Pas de query's aan de behoeften van uw organisatie aan. Voeg waarschuwingen toe om op de hoogte te worden gesteld van onverwachte waarden.
Requirements
- U moet toegang hebben tot systeemtabellen. Zie Accountactiviteit bewaken met systeemtabellen voor vereisten.
- Voor de meeste systeemtabellen moet het account Unity Catalog hebben ingeschakeld.
Tabellen voor SQL Warehouse-bewaking
| Systeemtabel | Beschrijving |
|---|---|
system.compute.warehouse_events |
Houdt gebeurtenissen voor het starten, stoppen, opschalen en afschalen van het magazijn bij. |
system.compute.warehouses |
Bevat momentopnamen van magazijnconfiguraties. |
system.query.history |
Registreert gegevens over elke query die wordt uitgevoerd in SQL Warehouses. |
system.billing.usage |
Bevat factureringsrecords voor al het Azure Databricks-gebruik. |
Voorbeeld: Magazijngebruik
Gebruik de volgende query's om te begrijpen hoe uw magazijn wordt gebruikt, waaronder welke query's, gebruikers en toepassingen de meeste activiteit stimuleren.
De traagste query's in een datawarehouse vinden
SELECT
statement_id,
executed_by,
statement_type,
execution_status,
total_duration_ms,
execution_duration_ms,
compilation_duration_ms,
waiting_at_capacity_duration_ms,
read_rows,
produced_rows,
start_time,
statement_text
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 1 DAY
ORDER BY
total_duration_ms DESC
LIMIT 50
Analyseer prestatiepatronen van zoekopdrachten in de loop van de tijd
SELECT
DATE(start_time) AS query_date,
COUNT(*) AS total_queries,
COUNT(CASE WHEN execution_status = 'FINISHED' THEN 1 END) AS successful_queries,
COUNT(CASE WHEN execution_status = 'FAILED' THEN 1 END) AS failed_queries,
ROUND(AVG(total_duration_ms), 0) AS avg_duration_ms,
ROUND(PERCENTILE(total_duration_ms, 0.5), 0) AS p50_duration_ms,
ROUND(PERCENTILE(total_duration_ms, 0.95), 0) AS p95_duration_ms,
ROUND(AVG(waiting_at_capacity_duration_ms), 0) AS avg_queue_wait_ms
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 30 DAY
GROUP BY
DATE(start_time)
ORDER BY
query_date DESC
De meest actieve gebruikers in een magazijn zoeken
SELECT
executed_by,
COUNT(*) AS query_count,
ROUND(SUM(total_duration_ms) / 1000 / 60, 2) AS total_duration_minutes,
ROUND(AVG(total_duration_ms), 0) AS avg_duration_ms
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 7 DAY
GROUP BY
executed_by
ORDER BY
query_count DESC
De belangrijkste clienttoepassingen zoeken
SELECT
client_application,
CASE
WHEN query_source.job_info.job_id IS NOT NULL THEN 'Job'
WHEN query_source.dashboard_id IS NOT NULL THEN 'Dashboard'
WHEN query_source.legacy_dashboard_id IS NOT NULL THEN 'Legacy Dashboard'
WHEN query_source.alert_id IS NOT NULL THEN 'Alert'
WHEN query_source.notebook_id IS NOT NULL THEN 'Notebook'
WHEN query_source.genie_space_id IS NOT NULL THEN 'Genie Space'
WHEN query_source.sql_query_id IS NOT NULL THEN 'SQL Editor'
ELSE 'Other'
END AS source_type,
COUNT(*) AS query_count,
ROUND(AVG(total_duration_ms), 0) AS avg_duration_ms
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 7 DAY
GROUP BY
client_application,
source_type
ORDER BY
query_count DESC
Mislukte queries monitoren
SELECT
DATE(start_time) AS failure_date,
execution_status,
error_message,
COUNT(*) AS failure_count,
COLLECT_SET(executed_by) AS affected_users
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND execution_status IN ('FAILED', 'CANCELED')
AND start_time >= NOW() - INTERVAL 7 DAY
GROUP BY
DATE(start_time),
execution_status,
error_message
ORDER BY
failure_date DESC,
failure_count DESC
Voorbeeld: Grootte van magazijn
Gebruik de volgende query's om te bepalen of uw magazijn de juiste grootte heeft. Queries die op maximale capaciteit wachten, suggereren dat u max_clusters moet verhogen. Query's met overmatige schijfoverloop suggereren dat u de magazijngrootte moet vergroten.
Query's identificeren die wachten op capaciteit
Query's met hoge waiting_at_capacity_duration_ms waarden worden in de wachtrij geplaatst in plaats van uit te voeren. Overweeg om de magazijninstelling max_clusters te verhogen zodat het magazijn kan worden geschaald.
SELECT
statement_id,
executed_by,
total_duration_ms,
waiting_at_capacity_duration_ms,
execution_duration_ms,
start_time,
statement_text
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 7 DAY
AND waiting_at_capacity_duration_ms > 0
ORDER BY
waiting_at_capacity_duration_ms DESC
LIMIT 50
Queries identificeren met excessieve schijfuitloop
Schijfstoring treedt op wanneer voor een query meer geheugen is vereist dan beschikbaar is. Overweeg om de magazijngrootte te vergroten om query's meer geheugen te geven. Overmatige overloop betekent meestal dat query's moeten worden geoptimaliseerd of dat de magazijngrootte te klein is voor de workload.
SELECT
statement_id,
executed_by,
spilled_local_bytes / (1024 * 1024) AS spilled_mb,
read_bytes / (1024 * 1024) AS read_mb,
total_duration_ms,
start_time,
statement_text
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 7 DAY
AND spilled_local_bytes > 0
ORDER BY
spilled_local_bytes DESC
LIMIT 50
Voorbeeld: Magazijnkosten
Gebruik de volgende query's om de kosten te begrijpen en bij te houden die zijn gekoppeld aan uw SQL-warehouses.
Magazijnkosten per dag bewaken
SELECT
usage_date,
sku_name,
ROUND(SUM(usage_quantity), 2) AS total_dbus,
ROUND(SUM(usage_quantity * list_prices.pricing.default), 2) AS estimated_list_cost
FROM
system.billing.usage
LEFT JOIN system.billing.list_prices ON usage.sku_name = list_prices.sku_name
AND price_end_time IS NULL
WHERE
usage_metadata.warehouse_id = '<warehouse-id>'
AND usage_date >= NOW() - INTERVAL 30 DAY
GROUP BY
usage_date,
sku_name
ORDER BY
usage_date DESC
Warehouse-gebeurtenissen correleren met queryvolume
Deze query helpt u inzicht te krijgen in de relatie tussen het opschalen van dataopslag en queryactiviteit om mogelijkheden voor kostenoptimalisatie te identificeren.
WITH hourly_events AS (
SELECT
DATE_TRUNC('hour', event_time) AS event_hour,
warehouse_id,
MAX(cluster_count) AS max_clusters,
COLLECT_SET(event_type) AS event_types
FROM
system.compute.warehouse_events
WHERE
warehouse_id = '<warehouse-id>'
AND event_time >= NOW() - INTERVAL 7 DAY
GROUP BY
DATE_TRUNC('hour', event_time),
warehouse_id
),
hourly_queries AS (
SELECT
DATE_TRUNC('hour', start_time) AS query_hour,
COUNT(*) AS query_count,
ROUND(AVG(total_duration_ms), 0) AS avg_duration_ms,
ROUND(AVG(waiting_at_capacity_duration_ms), 0) AS avg_queue_wait_ms
FROM
system.query.history
WHERE
compute.warehouse_id = '<warehouse-id>'
AND start_time >= NOW() - INTERVAL 7 DAY
GROUP BY
DATE_TRUNC('hour', start_time)
)
SELECT
COALESCE(e.event_hour, q.query_hour) AS hour,
q.query_count,
q.avg_duration_ms,
q.avg_queue_wait_ms,
e.max_clusters,
e.event_types
FROM
hourly_events e
FULL OUTER JOIN hourly_queries q ON e.event_hour = q.query_hour
ORDER BY
hour DESC