AGGREGATE_QUERY_HISTORY 视图¶
此 Account Usage 视图使您能够监控和跟踪一段时间内的语句执行情况。它包含与 QUERY_HISTORY 视图类似的数据,但以一分钟为间隔,对重复的 SQL 语句进行汇总。您可以使用此视图来监控工作负载并分析性能。
除了对混合表进行的查询外,您在 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 |
云服务使用的 Credit。 |
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 |
受到限制的混合表查询数。 |
OWNER_ROLE_TYPE |
TEXT |
拥有对象的角色类型是 |
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 值具有以下限制:
常数字面量必须是以下谓词的二元函数:等于、不等于、大于(或等于)、小于(或等于)。
别名必须相同。
只要 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 ;
您可以查询视图以监控整体工作负载吞吐量和并发性。许多工作负载具有规律的周期性模式。任何意外的峰值或下降都可能值得调查。
例如,监控仓库 my_warehouse
在 11 月第 1 周的吞吐量和并发性:
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
;