You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中通过query_id获取并查看Query Profile?

回答

1. 通过Query ID查看Query Profile

完全可以通过Query ID查看对应的Query Profile,有两种常用方式:

  • Snowsight UI操作:进入Snowsight后,打开左侧菜单的【Query History】,在搜索框中直接输入目标Query ID,找到对应记录后点击进入详情页,即可查看完整的Query Profile(包括各阶段执行耗时、数据扫描量、溢出情况等)。
  • SQL查询方式:通过系统函数直接提取Profile数据,需要具备目标查询对应的MONITOR或OWNER权限,执行以下语句:
    SELECT * FROM TABLE(INFORMATION_SCHEMA.QUERY_PROFILE('<your_query_id>'));
    
    该查询会返回Profile的结构化数据,可自行分析各执行节点的性能瓶颈。

2. 通过Query ID生成Explain Plan(间接方式)

已执行的Query ID无法直接生成对应的Explain Plan(因为Explain Plan是查询执行前的预分析结果),但可以通过以下步骤间接获取:

  1. 先通过Query ID提取原查询语句:
    SELECT query_text FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY()) 
    WHERE query_id = '<your_query_id>';
    
  2. 拿到原查询语句后,在语句前添加EXPLAIN关键字执行,即可生成对应的执行计划:
    EXPLAIN <extracted_query_text>;
    

针对你的Stream性能问题分析

从你描述的select count(1) from my_stream的Profile来看,大量扫描行数和本地存储溢出,大概率是因为普通流(Standard Stream)会追踪源表的所有变更操作(插入、更新、删除),流中会保留每一条变更的版本记录,包括被更新/删除的旧数据行。当执行count时,需要扫描流中所有历史变更记录,导致数据量激增、性能下降。

而Append-Only流仅追踪源表的插入操作,不会保留更新/删除的旧版本数据,流中的数据量远小于普通流,执行count等操作时性能会显著提升。如果你的业务场景不需要追踪更新/删除变更,将普通流改为Append-Only流是解决该性能问题的合理方案。

内容的提问来源于stack exchange,提问作者ARPAN BANERJEE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:53:17