SQL ambarı etkinliğini izlemek için örnek sorgular

SQL ambarı performansını, kullanımını ve maliyetlerini izlemek için sistem tablolarıyla bu örnek SQL sorgularını kullanın. Sorguları kuruluşunuzun gereksinimlerine uyacak şekilde değiştirin. Beklenmeyen değerlere ilişkin bildirim almak için uyarılar ekleyin.

Gereksinimler

  • Sistem tablolarına erişiminiz olmalıdır. Gereksinimler için bkz. Sistem tabloları başvurusu .
  • Çoğu sistem tablosu, hesabın Unity Kataloğu'nu etkinleştirmesini gerektirir.

SQL ambarı izleme tabloları

Sistem tablosu Açıklama
system.compute.warehouse_events Ambar başlatma, durdurma, ölçek artırma ve ölçek azaltma olaylarını izler.
system.compute.warehouses Ambar yapılandırmalarının anlık görüntülerini içerir.
system.query.history SQL ambarlarında yürütülen her sorguyla ilgili ayrıntıları kaydeder.
system.billing.usage Tüm Azure Databricks kullanımı için faturalama kayıtlarını içerir.

Örnek: Ambar kullanımı

Ambarınızın nasıl kullanıldığını ve en fazla etkinliğe hangi sorguların, kullanıcıların ve uygulamaların neden olduğunu anlamak için aşağıdaki sorguları kullanın.

Ambardaki en yavaş sorguları bulma

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
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

Bir ambarda en etkin kullanıcıları bulma

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

En iyi istemci uygulamalarını bulma

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.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 Agent'
    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

Başarısız sorguları izleme

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

Örnek: Ambar boyutlandırması

Ambarınızın doğru boyutlandırılıp boyutlandırılmadığını belirlemek için aşağıdaki sorguları kullanın. Kapasitede bekleyen sorgular, max_clusters öğesini artırmanız gerektiğini gösterir. Aşırı disk sızıntısı olan sorgular, ambar boyutunu artırmanız gerektiğini gösterir.

Kapasitede bekleyen sorguları tanımlama

Yüksek waiting_at_capacity_duration_ms değerlerine sahip sorgular, çalışmak yerine kuyrukta zaman geçirir. Deponun max_clusters ölçeklenmesine olanak tanımak için depo ayarını artırmayı göz önünde bulundurun.

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

Aşırı disk sızıntısı olan sorguları tanımlama

Bir sorgu kullanılabilir bellekten daha fazla bellek gerektirdiğinde disk taşma oluşur. Sorgulara daha fazla bellek sağlamak için ambar boyutunu artırmayı göz önünde bulundurun. Aşırı taşma genellikle sorguların iyileştirilmesi gerektiği veya veri ambarı boyutunun iş yükü için çok küçük olduğu anlamına gelir.

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

Örnek: Ambar maliyetleri

SQL ambarlarınızla ilişkili maliyetleri anlamak ve izlemek için aşağıdaki sorguları kullanın.

Ambar maliyetini güne göre izleme

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

Ambar olaylarını sorgu birimiyle ilişkilendirme

Bu sorgu, maliyet iyileştirme fırsatlarını tanımlamak için ambar ölçeklendirme olayları ve sorgu etkinliği arasındaki ilişkiyi anlamanıza yardımcı olur.

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