设置跟踪级别

您可以使用 TRACE_LEVEL 参数来管理存储在事件表中的事件跟踪数据的详细程度。

TRACE_LEVEL 既是 :ref:` 对象 <label-object-parameters>` 参数又是 :ref:` 会话 <label-session-parameters>` 参数,这意味着您可以在对象和会话上设置该参数。

了解跟踪级别

通过 TRACE_LEVEL 参数,可以指定存储在事件表中的跟踪事件的作用域。您可以将 TRACE_LEVEL 参数设置为以下值之一:

OFF:

不记录 Span 或跟踪事件。

ALWAYS:

记录所有 Span 并跟踪事件。

ON_EVENT:

:emph:` 仅 ` 当存储过程或 UDFs 显式添加事件时,才记录跟踪事件。

设置对象的跟踪级别

您可以设置以下对象的跟踪级别:

  • 存储过程

  • 用户定义函数 (UDF)

  • 包含存储过程和 UDFs 的数据库或架构

备注

您不能设置 Streamlit 对象的跟踪级别,但可以设置包含该对象的数据库或架构的跟踪级别。

要设置对象的跟踪级别,请执行以下操作:

  1. 验证您是否有权设置对象的跟踪级别。

    您必须使用已授予或继承以下权限的角色:

    • 对账户具有 MODIFY TRACE LEVEL 全局权限

    • 对要为其设置 TRACE_LEVEL 的对象具有 MODIFY 权限

    例如,要向 central_event_admin 角色授予权限,以对任何数据库、架构、存储过程或账户中的 UDF(即使 central_event_admin 角色对它们不具有任何其他权限)设置跟踪级别,请执行以下语句:

    GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
    
    Copy

    请注意,为了设置存储过程或 UDF 的跟踪级别,该角色还必须对包含存储过程或 UDF 的数据库和架构具有 USAGE 权限。

  2. 使用 ALTER <object> 命令设置对象上的 TRACE_LEVEL 参数。

    例如,要设置特定 UDF 的跟踪级别,请使用 ALTER FUNCTION 设置该 UDF 的 TRACE_LEVEL 参数。再举一个例子,若要为数据库中的所有函数和过程设置默认跟踪级别,请使用 ALTER DATABASE 来设置该数据库上的 TRACE_LEVEL 参数。

    以下示例为数据库 db1 中所有函数和过程将跟踪级别设为 ON_EVENT。然后,该示例为 UDF f1(int) 将跟踪级别替换为 ALWAYS

    USE ROLE central_event_admin;
    
    ALTER DATABASE db1 SET TRACE_LEVEL = ON_EVENT;
    ALTER FUNCTION f1(int) SET TRACE_LEVEL = ALWAYS;
    
    Copy

    有关 Snowflake 如何在不同对象上设置 TRACE_LEVEL 时确定有效跟踪级别的详细信息,请参阅 了解 Snowflake 如何确定有效的跟踪级别

设置当前会话的跟踪级别

要设置对当前会话中函数和过程都是调用的跟踪级别,请执行以下操作:

  1. 验证您是否有权设置对象的跟踪级别。

    您必须使用已授予或继承 MODIFY SESSION TRACE LEVEL 全局权限的角色。

    例如,要向 developer_debugging 角色授予权限,以设置当前会话的跟踪级别,请执行以下语句:

    GRANT MODIFY SESSION TRACE LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. 使用 ALTER SESSION 命令设置当前会话的 TRACE_LEVEL 参数。

    USE ROLE developer_debugging;
    
    ALTER SESSION SET TRACE_LEVEL = ALWAYS;
    
    Copy

如果针对当前会话及该会话中调用的函数和过程将 TRACE_LEVEL 参数设置了不同级别,则 Snowflake 将确定要使用的有效跟踪级别。请参阅 了解 Snowflake 如何确定有效的跟踪级别

了解 Snowflake 如何确定有效的跟踪级别

TRACE_LEVEL 既是 :ref:` 对象参数 <label-object-parameters>,又是 :ref: 会话参数 <label-session-parameters>`。

会话参数和对象参数类型都具有 :ref:` 级别的层次结构 <label-parameter_hierarchy_and_types>`,允许您替换更高级别设置的参数:

  • 对于会话参数,层次结构为账户 » 用户 » 会话。

    这意味着您可以为账户设置参数、替换用户的账户级参数,并替换当前会话的用户级参数。

  • 对于对象参数,层次结构为账户 » 数据库 » 架构 » 对象。

    这意味着您可以为账户设置参数、替换数据库或架构的账户级参数,并替换该数据库或架构中的特定存储过程以及 UDFs 的数据库级参数或架构级参数。

例如,函数的 TRACE_LEVEL 会替换包含该函数的账户的 TRACE_LEVEL。如果账户的 TRACE_LEVEL 为 ON_EVENT,而账户中的 UDF 的 TRACE_LEVEL 为 ALWAYS,则有效的 TRACE_LEVEL 为 ALWAYS (函数的级别,而不是账户的级别)。

在以下示例中,使用 ALWAYS 跟踪级别,因为函数 MY_UDF 低于层次结构中的 ACCOUNT。

ALTER ACCOUNT SET TRACE_LEVEL = ON_EVENT;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = ALWAYS;
Copy

如果同时在会话和对象参数层次结构中设置了 TRACE_LEVEL 参数,则使用最详细的 TRACE_LEVEL。换句话说, ALWAYS 替换 ON_EVENTOFFON_EVENT 替换 OFF

在以下示例中,使用 ALWAYS 跟踪级别,因为 ALWAYS 比 OFF 更详细。

ALTER SESSION SET TRACE_LEVEL = ALWAYS;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;
Copy
语言: 中文