- スキーマ:
AGGREGATE_QUERY_HISTORY ビュー¶
このAccount Usageビューでは、ステートメントの実行を長期にわたってモニターし、追跡することができます。QUERY_HISTORY ビューと同様のデータが含まれていますが、繰り返しの SQL ステートメントについては1分間隔で集計されます。このビューを使用して、ワークロードをモニターし、パフォーマンスを分析することができます。
ハイブリッドテーブルに対するクエリに加えて、Snowflakeで実行するすべてのクエリが AGGREGATE_QUERY_HISTORY に含まれます。しかし、 AGGREGATE_QUERY_HISTORY は特に、少数の異なるステートメントを高いスループットで繰り返し実行するUnistoreワークロードのモニターと分析に役立ちます。
列¶
列名 | データ型 | 説明 |
---|---|---|
CALLS | NUMBER | 集計区間でステートメント(クエリおよびクエリプラン)が実行された回数。 |
INTERVAL_START_TIME | TIMESTAMP_LTZ | 測定ウィンドウの開始時間(ローカルタイムゾーン)。 |
INTERVAL_END_TIME | TIMESTAMP_LTZ | 測定ウィンドウの終了時間(ローカルタイムゾーン)。 |
QUERY_PARAMETERIZED_HASH | TEXT | 同一のパラメーター化されたクエリを識別するための一意の ID。 QUERY_PARAMETERIZED_HASH 列 をご参照ください。 |
QUERY_TEXT | TEXT | SQL ステートメントのサンプルテキスト。 |
DATABASE_ID | NUMBER | 使用されていたデータベースの内部/システム生成識別子。 |
DATABASE_NAME | TEXT | クエリ時に使用されていたデータベース。 |
SCHEMA_ID | NUMBER | 使用されていたスキーマの内部/システム生成識別子。 |
SCHEMA_NAME | TEXT | クエリ時に使用されていたスキーマ。 |
QUERY_TYPE | TEXT | DML、クエリなど。クエリに失敗した場合、クエリ型は UNKNOWN になります。 |
SESSION_ID | NUMBER | ステートメントを実行したセッション。 |
USER_NAME | TEXT | クエリを発行したユーザー。 |
ROLE_NAME | TEXT | クエリの時点でセッションでアクティブだったロール。 |
ROLE_TYPE | TEXT | クエリを実行した |
WAREHOUSE_ID | NUMBER | 使用されていたウェアハウスの内部/システム生成識別子。 |
WAREHOUSE_NAME | TEXT | クエリが実行されたウェアハウス(ある場合)。 |
WAREHOUSE_SIZE | TEXT | このステートメントが実行されたときのウェアハウスのサイズ。 |
WAREHOUSE_TYPE | TEXT | このステートメントが実行されたときのウェアハウスのタイプ。 |
QUERY_TAG | TEXT | QUERY_TAG セッションパラメーターを介してこのステートメントに設定されたクエリタグ。 |
IS_CLIENT_GENERATED_STATEMENT | BOOLEAN | クエリがクライアントによって生成されたかどうかを示します。 |
RELEASE_VERSION | TEXT |
|
ERRORS | ARRAY | 集計区間中に発生したエラーコードとメッセージのリスト。各エラーは |
TOTAL_ELAPSED_TIME | OBJECT | 経過時間(ミリ秒単位)。 |
BYTES_SCANNED | OBJECT | このステートメントによってスキャンされたバイト数。 |
PERCENTAGE_SCANNED_FROM_CACHE | OBJECT | ローカルディスクキャッシュからスキャンされたデータの割合。値は0.0〜1.0の範囲です。真のパーセントを得るために、100を掛けます。 |
BYTES_WRITTEN | OBJECT | 書き込まれたバイト数(例:テーブルへのロード時)。 |
BYTES_WRITTEN_TO_RESULT | OBJECT | 結果オブジェクトに書き込まれるバイト数。たとえば、 |
BYTES_READ_FROM_RESULT | OBJECT | 結果オブジェクトから読み取ったバイト数。 |
ROWS_PRODUCED | OBJECT | このステートメントによって生成された行の数。 |
ROWS_INSERTED | OBJECT | クエリによって挿入された行の数。 |
ROWS_UPDATED | OBJECT | クエリによって更新された行の数。 |
ROWS_DELETED | OBJECT | クエリによって削除された行の数。 |
ROWS_UNLOADED | OBJECT | データのエクスポート中にアンロードされた行の数。 |
BYTES_DELETED | OBJECT | クエリによって削除されたバイト数。 |
PARTITIONS_SCANNED | OBJECT | スキャンされたマイクロパーティションの数。 |
PARTITIONS_TOTAL | OBJECT | このクエリに含まれるすべてのテーブルのマイクロパーティション合計。 |
BYTES_SPILLED_TO_LOCAL_STORAGE | OBJECT | ローカルディスクにスピルしたデータの量。 |
BYTES_SPILLED_TO_REMOTE_STORAGE | OBJECT | リモートディスクにスピルしたデータの量。 |
BYTES_SENT_OVER_THE_NETWORK | OBJECT | ネットワーク経由で送信されたデータの量。 |
COMPILATION_TIME | OBJECT | コンパイル時間(ミリ秒単位) |
EXECUTION_TIME | OBJECT | 実行時間(ミリ秒単位) |
QUEUED_PROVISIONING_TIME | OBJECT | ウェアハウスの作成、再開、またはサイズ変更のために、ウェアハウスコンピューティングリソースでのプロビジョニングを待機する、ウェアハウスキューで費やされた時間(ミリ秒単位)。 |
QUEUED_REPAIR_TIME | OBJECT | ウェアハウス内のコンピューティングリソースの修復を待機する、ウェアハウスキュー内で費やされた時間(ミリ秒単位)。 |
QUEUED_OVERLOAD_TIME | OBJECT | ウェアハウスが現在のクエリワークロードによって過負荷になっているために、ウェアハウスキューで費やされた時間(ミリ秒)。 |
TRANSACTION_BLOCKED_TIME | OBJECT | 同時 DMLによってブロックされた時間(ミリ秒)。 |
OUTBOUND_DATA_TRANSFER_CLOUD | TEXT | データを別の地域やクラウドにアンロードするステートメントのターゲットクラウドプロバイダー。 |
OUTBOUND_DATA_TRANSFER_REGION | TEXT | データを別のリージョンやクラウドにアンロードするステートメントのターゲットリージョン。 |
OUTBOUND_DATA_TRANSFER_BYTES | OBJECT | 別の地域やクラウドにデータをアンロードするステートメントで転送されたバイト数。 |
INBOUND_DATA_TRANSFER_CLOUD | TEXT | 別の地域やクラウドからデータをロードするステートメントのソースクラウドプロバイダー。 |
INBOUND_DATA_TRANSFER_REGION | TEXT | 別の地域やクラウドからデータをロードするステートメントのソース地域。 |
INBOUND_DATA_TRANSFER_BYTES | OBJECT | 他のアカウントからの複製操作で転送されたバイト数。ソースアカウントは、現在のアカウントと同じリージョンにある場合もあれば、異なるリージョンにある場合もあります。 |
LIST_EXTERNAL_FILES_TIME | OBJECT | 外部ファイルのリストに費やされた時間(ミリ秒単位)。 |
CREDITS_USED_CLOUD_SERVICES | OBJECT | クラウドサービスのために使用されたクレジットの数。 |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS | OBJECT | このクエリがリモートサービスを呼び出した回数の合計。重要な詳細については、使用上の注意をご参照ください。 |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS | OBJECT | このクエリが、すべてのリモートサービスに対してすべての呼び出しで送信した行の総数。 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS | OBJECT | このクエリが、すべてのリモートサービスに対してすべての呼び出しから受信した行の総数。 |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES | OBJECT | このクエリが、すべてのリモートサービスに対してすべての呼び出しで送信したバイトの総数。 |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES | OBJECT | このクエリが、すべてのリモートサービスに対してすべての呼び出しから受信したバイトの総数。 |
QUERY_LOAD_PERCENT | OBJECT | このクエリ実行に対するウェアハウス内のアクティブなコンピューティングリソースのおおよその割合。 |
QUERY_ACCELERATION_BYTES_SCANNED | OBJECT | Query Acceleration Service によってスキャンされたバイト数。 |
QUERY_ACCELERATION_PARTITIONS_SCANNED | OBJECT | Query Acceleration Serviceによってスキャンされたパーティションの数。 |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR | OBJECT | クエリが受けたであろうメリット の上限 スケールファクター。 |
CHILD_QUERIES_WAIT_TIME | OBJECT | メモ化可能な関数 を呼び出すときに、キャッシュされたルックアップが完了するまでの時間(ミリ秒単位)。 |
HYBRID_TABLE_REQUESTS_THROTTLED_COUNT | NUMBER | スロットリングされたハイブリッドテーブルクエリの数。 |
OBJECT データ型には以下のフィールドが含まれます。
フィールド名 | 説明 |
---|---|
集計区間内の全実行における合計。 | |
集計区間内の全実行における平均。 | |
集計区間内の全実行における標準偏差。 | |
集計区間内の全実行における最小値。 | |
集計区間内の全実行における中央値。 | |
集計区間内の全実行における90パーセンタイル。 | |
集計区間内の全実行における99パーセンタイル。 | |
集計区間内の全実行における99.9パーセンタイル。 | |
集計区間内の全実行における最大値。 |
注釈
以下の OBJECT 型の列には sum
フィールドは含まれません。
PERCENTAGE_SCANNED_FROM_CACHE
QUERY_LOAD_PERCENT
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR
QUERY_PARAMETERIZED_HASH 列¶
QUERY_PARAMETERIZED_HASH 列には、パラメーター化されたクエリに基づいて計算されたハッシュ値が含まれます。これは、すべてのリテラルをパラメーター化した後のクエリのバージョンを意味します。
たとえば、以下のクエリは同じ QUERY_PARAMETERIZED_HASH 値を持ちます。
SELECT * FROM table1 WHERE table1.name = 'TIM'
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
QUERY_PARAMETERIZED_HASH 値には以下の制約があります。
定数リテラルは、述語に対する以下のバイナリ関数の中になければなりません: equal、not equal、 greater (or equal) than、smaller (or equal) than。
エイリアスは同じでなければなりません。
SQL のテキストに違いがある限り、以下の例外を除いて QUERY_HASH と QUERY_PARAMETERIZED_HASH の値は異なります。
識別子/セッション変数/ステージ名の大文字と小文字は区別されません。
空白の違いは無視されます。
リテラルは前述のバイナリ述語規則を満たします。
使用上の注意¶
ビューの待機時間は最大180分(3時間)です。
例¶
AGGREGATE_QUERY_HISTORY ビューを使用して、エラー、キューイング、ロックブロッキング、ハイブリッドテーブルスロットルなどの潜在的な問題をモニターすることができます。通常、これらのメトリックは一貫して低いことが望まれます。これらのメトリックのいずれかが急上昇した場合は、問題のある可能性があります。
SET (START_DATE, END_DATE) = ('2023-11-01', '2023-11-08'); 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 TRUE 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 TRUE AND interval_start_time > $START_DATE AND interval_start_time < $END_DATE ) GROUP BY ALL ) SELECT time_issues.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 FULL JOIN errors ON errors.interval_start_time = time_issues.interval_start_time ;
ビューにクエリを実行することで、ワークロード全体のスループットと同時実行性をモニターすることができます。多くのワークロードには、規則的な周期パターンがあります。予期しない上昇や下降があれば、調査する価値があるかもしれません。
たとえば、11月第1週のウェアハウス my_warehouse
のスループットと同時実行性をモニターするとします。
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 TRUE AND warehouse_name = 'MY_WAREHOUSE' AND interval_start_time > '2023-11-01' AND interval_start_time < '2023-11-08' GROUP BY interval_start_time ;
最も一般的で頻繁に繰り返されるクエリは、ワークロードの最適化または効率化のために集中的に取り組むのに適しています。ビューにクエリを実行することで、ワークロードの実行回数が上位のクエリを識別することができます。
たとえば、ウェアハウス my_warehouse
の実行回数が上位のクエリを識別するとします。
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 > '2023-11-01' AND interval_start_time < '2023-11-08' GROUP BY query_parameterized_hash ORDER BY execution_count DESC ;
平均合計遅延時間が最も遅いクエリを識別するには
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 > '2023-07-01' AND interval_start_time < '2023-07-08' GROUP BY query_parameterized_hash ORDER BY avg_latency DESC ;
興味のある特定のクエリについてパフォーマンスを経時的に分析するには
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 > '2023-07-01' AND interval_start_time < '2023-07-08' ORDER BY interval_start_time DESC ;