架构:

ACCOUNT_USAGE

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

指定是 APPLICATIONDATABASE_ROLE 还是 ROLE 执行了查询。

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

格式为 major_release.minor_release.patch_release 的版本。

ERRORS

ARRAY

在聚合间隔期间发生的错误代码和消息的列表。每个错误的格式为 {"code": "code1", "message": "msg1", "count": 10}

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

写入结果对象的字节数。 例如,select * from . . . 将生成一组表格格式的结果,表示所选内容中的每个字段。 . . 通常,结果对象表示作为查询结果生成的任何内容,BYTES_WRITTEN_TO_RESULT 表示返回结果的大小。

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

拥有对象的角色类型是 ROLEDATABASE_ROLE. 如果 Snowflake Native App 拥有该对象,则该值为 APPLICATION. 如果您删除该对象,则 Snowflake 会返回 NULL,原因是删除的对象不具有所有者角色。

OBJECT 数据类型包含以下字段:

字段名称

描述

sum

聚合间隔内所有执行的总和。

avg

聚合间隔内所有执行的平均值。

stddev

聚合间隔内所有执行的标准差。

min

聚合间隔内所有执行的最小值。

median

聚合间隔内所有执行的中位数。

p90

聚合间隔内所有执行的第 90 个百分位数。

p99

聚合间隔内所有执行的第 99 个百分位数。

p99.9

聚合间隔内所有执行的第 99.9 个百分位数。

max

聚合间隔内所有执行的最大值。

备注

以下 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'
Copy
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Copy

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

您可以查询视图以监控整体工作负载吞吐量和并发性。许多工作负载具有规律的周期性模式。任何意外的峰值或下降都可能值得调查。

例如,监控仓库 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
;
Copy

对于最常用且重复次数最多的查询,最值得集中精力进行优化或提高工作负载效率。您可以查询视图,按执行计数确定一个工作负载的热门查询。

例如,按仓库 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
;
Copy

要按平均总延迟确定速度最慢的查询,请执行以下操作:

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

要分析感兴趣的特定查询随时间推移的性能,请执行以下操作:

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
;
Copy
语言: 中文