Snowflake

Snowflake QUERY_HISTORYで性能分析: INFORMATION_SCHEMAとACCOUNT_USAGE徹底比較

2026-03-26
更新: 2026-03-27
NicheeLab編集部

SnowflakeのQUERY_HISTORYは、実行されたクエリの詳細な 実行統計を提供する機能で、性能分析・ボトルネック特定・コスト最適化に不可欠です。INFORMATION_SCHEMAのテーブル関数とACCOUNT_USAGEのビューの2つの取得方法があり、 遅延・保持期間・権限モデルが異なります。

2つのデータソース

QUERY_HISTORYには取得先が2つあります。 試験ではこの違いを正確に問われるため、以下の比較を押さえてください。

比較項目INFORMATION_SCHEMA.QUERY_HISTORY()ACCOUNT_USAGE.QUERY_HISTORY
種別テーブル関数ビュー
保持期間直近7日間365日間
データ遅延なし(リアルタイム)最大45分
最大取得件数10,000件(RESULT_LIMIT)制限なし
スコープ現在のロールで実行権限があるクエリアカウント全体の全クエリ
必要権限特別な権限不要(ロール範囲内)SNOWFLAKE DBのIMPORTED PRIVILEGES
呼び出し方法SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(...))SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY

INFORMATION_SCHEMA.QUERY_HISTORY()の使い方

テーブル関数として呼び出し、名前付きパラメータで期間やユーザーを絞り込みます。

-- 直近1時間のクエリ履歴を取得
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY(
  DATE_RANGE_START => DATEADD('HOUR', -1, CURRENT_TIMESTAMP()),
  DATE_RANGE_END => CURRENT_TIMESTAMP(),
  RESULT_LIMIT => 100
))
ORDER BY START_TIME DESC;

-- 特定ユーザーのクエリ履歴
SELECT
  QUERY_ID,
  QUERY_TEXT,
  TOTAL_ELAPSED_TIME,
  BYTES_SCANNED,
  ROWS_PRODUCED,
  WAREHOUSE_NAME
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_USER(
  USER_NAME => 'ANALYST_USER',
  RESULT_LIMIT => 50
))
ORDER BY TOTAL_ELAPSED_TIME DESC;

-- 特定ウェアハウスのクエリ履歴
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_WAREHOUSE(
  WAREHOUSE_NAME => 'ANALYTICS_WH',
  RESULT_LIMIT => 50
));

ACCOUNT_USAGE.QUERY_HISTORYの使い方

長期間の分析やアカウント全体の俯瞰にはACCOUNT_USAGEビューを使います。 最大45分の遅延がある点を理解し、リアルタイム監視にはINFORMATION_SCHEMAを使い分けます。

-- 過去30日のクエリ統計サマリ
SELECT
  USER_NAME,
  WAREHOUSE_NAME,
  COUNT(*) AS query_count,
  AVG(TOTAL_ELAPSED_TIME) / 1000 AS avg_elapsed_sec,
  SUM(BYTES_SCANNED) / POWER(1024, 3) AS total_scanned_tb,
  AVG(PARTITIONS_SCANNED / NULLIF(PARTITIONS_TOTAL, 0)) AS avg_scan_ratio
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE START_TIME >= DATEADD('DAY', -30, CURRENT_TIMESTAMP())
  AND EXECUTION_STATUS = 'SUCCESS'
GROUP BY USER_NAME, WAREHOUSE_NAME
ORDER BY total_scanned_tb DESC;

ボトルネック分析SQL

性能ボトルネックの特定には、以下の3つの観点で分析します。

1. 実行時間が長いクエリの特定

-- 過去7日で実行時間が長いTOP20
SELECT
  QUERY_ID,
  SUBSTR(QUERY_TEXT, 1, 200) AS query_preview,
  USER_NAME,
  WAREHOUSE_NAME,
  WAREHOUSE_SIZE,
  TOTAL_ELAPSED_TIME / 1000 AS elapsed_sec,
  COMPILATION_TIME / 1000 AS compile_sec,
  EXECUTION_TIME / 1000 AS exec_sec,
  QUEUED_OVERLOAD_TIME / 1000 AS queue_sec,
  BYTES_SCANNED / POWER(1024, 3) AS scanned_tb
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE START_TIME >= DATEADD('DAY', -7, CURRENT_TIMESTAMP())
  AND EXECUTION_STATUS = 'SUCCESS'
  AND QUERY_TYPE = 'SELECT'
ORDER BY TOTAL_ELAPSED_TIME DESC
LIMIT 20;

2. プルーニング効率が低いクエリ

-- プルーニング効率が50%未満(スキャン率が50%超)のクエリ
SELECT
  QUERY_ID,
  SUBSTR(QUERY_TEXT, 1, 200) AS query_preview,
  PARTITIONS_SCANNED,
  PARTITIONS_TOTAL,
  ROUND(PARTITIONS_SCANNED / NULLIF(PARTITIONS_TOTAL, 0) * 100, 1) AS scan_pct,
  BYTES_SCANNED / POWER(1024, 2) AS scanned_mb
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE START_TIME >= DATEADD('DAY', -7, CURRENT_TIMESTAMP())
  AND PARTITIONS_TOTAL > 100
  AND PARTITIONS_SCANNED / NULLIF(PARTITIONS_TOTAL, 0) > 0.5
  AND EXECUTION_STATUS = 'SUCCESS'
ORDER BY scan_pct DESC
LIMIT 20;

3. キュー待ちが発生しているクエリ

-- キュー待ちが5秒以上のクエリ(ウェアハウス不足の兆候)
SELECT
  QUERY_ID,
  WAREHOUSE_NAME,
  QUEUED_OVERLOAD_TIME / 1000 AS queue_sec,
  QUEUED_PROVISIONING_TIME / 1000 AS provisioning_sec,
  TOTAL_ELAPSED_TIME / 1000 AS elapsed_sec,
  START_TIME
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE START_TIME >= DATEADD('DAY', -7, CURRENT_TIMESTAMP())
  AND QUEUED_OVERLOAD_TIME > 5000
ORDER BY QUEUED_OVERLOAD_TIME DESC
LIMIT 20;

性能分析で重要なカラム

カラム名内容分析での使い方
TOTAL_ELAPSED_TIMEクエリの総実行時間(ms)コストインパクトの大きいクエリ特定
COMPILATION_TIMEコンパイル時間(ms)複雑なクエリの最適化対象特定
QUEUED_OVERLOAD_TIMEウェアハウスのキュー待ち(ms)ウェアハウスサイズ不足の検知
BYTES_SCANNEDスキャンしたデータ量フルスキャンの検知
PARTITIONS_SCANNED / TOTALスキャン/全パーティション数プルーニング効率の評価
BYTES_SPILLED_TO_LOCAL_STORAGEローカルディスクへのスピルメモリ不足の検知
BYTES_SPILLED_TO_REMOTE_STORAGEリモートストレージへのスピル深刻なメモリ不足の検知

試験で問われるポイント

  • INFORMATION_SCHEMAは7日間/リアルタイム/10,000件上限、ACCOUNT_USAGEは365日間/最大45分遅延/件数無制限
  • ACCOUNT_USAGEにはSNOWFLAKEデータベースのIMPORTED PRIVILEGES権限が必要
  • QUEUED_OVERLOAD_TIMEが大きい → ウェアハウスリソース不足(マルチクラスタ化やサイズアップを検討)
  • BYTES_SPILLED_TO_REMOTE_STORAGE > 0 → ウェアハウスサイズの拡大が必要
  • QUERY_HISTORY_BY_USER / QUERY_HISTORY_BY_WAREHOUSEの使い分け

問題で確認

SnowPro

問題 1

アカウント管理者が過去90日間の全ユーザーのクエリ実行統計を分析したいと考えています。最も適切なデータソースはどれですか?

  1. INFORMATION_SCHEMA.QUERY_HISTORY()テーブル関数をRESULT_LIMIT = 100000で呼び出す
  2. SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORYビューからSELECTする
  3. SHOW QUERIES HISTORY IN ACCOUNTコマンドを実行する
  4. Query Profile UIから全クエリのCSVをエクスポートする

正解: B

INFORMATION_SCHEMA.QUERY_HISTORY()は直近7日間・最大10,000件のため90日間の分析には不向きです。ACCOUNT_USAGE.QUERY_HISTORYは365日間の全クエリ履歴を保持しており、この要件に適合します。ただしデータ反映に最大45分の遅延がある点は理解しておく必要があります。

よくある質問

INFORMATION_SCHEMA.QUERY_HISTORYとACCOUNT_USAGE.QUERY_HISTORYの違いは?

INFORMATION_SCHEMA.QUERY_HISTORY()はテーブル関数で、直近7日間の履歴を最大10,000件まで即時取得できます。現在のロールで実行権限があるクエリのみが表示されます。ACCOUNT_USAGE.QUERY_HISTORYはビューで、最大365日間の全アカウントの履歴を保持しますが、データ反映に最大45分の遅延があります。閲覧にはSNOWFLAKEデータベースのIMPORTED PRIVILEGES権限が必要です。

QUERY_HISTORYで最もコストが高いクエリを特定するにはどのカラムを見ますか?

直接的な「コスト」カラムはありませんが、TOTAL_ELAPSED_TIME(実行時間ms)、BYTES_SCANNED(スキャンデータ量)、PARTITIONS_SCANNED / PARTITIONS_TOTAL(プルーニング効率)の3つの指標を組み合わせてボトルネックを特定します。ウェアハウスのクレジットは時間課金のため、TOTAL_ELAPSED_TIMEが長いクエリほどコストインパクトが大きいです。

QUERY_HISTORYのデータを長期保存するにはどうすればよいですか?

ACCOUNT_USAGE.QUERY_HISTORYの保持期間は365日です。それ以上長期間保持したい場合は、定期的にCREATE TABLE AS SELECTまたはINSERT INTOで専用テーブルにコピーするタスクを作成します。日次で前日分を増分コピーするServerless Taskを組むのが一般的なパターンです。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.