设置跟踪级别¶
您可以使用 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 对象的跟踪级别,但可以设置包含该对象的数据库或架构的跟踪级别。
要设置对象的跟踪级别,请执行以下操作:
验证您是否有权设置对象的跟踪级别。
您必须使用已授予或继承以下权限的角色:
对账户具有 MODIFY TRACE LEVEL 全局权限
对要为其设置 TRACE_LEVEL 的对象具有 MODIFY 权限
例如,要向
central_event_admin
角色授予权限,以对任何数据库、架构、存储过程或账户中的 UDF(即使central_event_admin
角色对它们不具有任何其他权限)设置跟踪级别,请执行以下语句:GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
请注意,为了设置存储过程或 UDF 的跟踪级别,该角色还必须对包含存储过程或 UDF 的数据库和架构具有 USAGE 权限。
使用 ALTER <object> 命令设置对象上的 TRACE_LEVEL 参数。
例如,要设置特定 UDF 的跟踪级别,请使用 ALTER FUNCTION 设置该 UDF 的 TRACE_LEVEL 参数。再举一个例子,若要为数据库中的所有函数和过程设置默认跟踪级别,请使用 ALTER DATABASE 来设置该数据库上的 TRACE_LEVEL 参数。
以下示例为数据库
db1
中所有函数和过程将跟踪级别设为ON_EVENT
。然后,该示例为 UDFf1(int)
将跟踪级别替换为ALWAYS
。USE ROLE central_event_admin; ALTER DATABASE db1 SET TRACE_LEVEL = ON_EVENT; ALTER FUNCTION f1(int) SET TRACE_LEVEL = ALWAYS;
有关 Snowflake 如何在不同对象上设置 TRACE_LEVEL 时确定有效跟踪级别的详细信息,请参阅 了解 Snowflake 如何确定有效的跟踪级别。
设置当前会话的跟踪级别¶
要设置对当前会话中函数和过程都是调用的跟踪级别,请执行以下操作:
验证您是否有权设置对象的跟踪级别。
您必须使用已授予或继承 MODIFY SESSION TRACE LEVEL 全局权限的角色。
例如,要向
developer_debugging
角色授予权限,以设置当前会话的跟踪级别,请执行以下语句:GRANT MODIFY SESSION TRACE LEVEL ON ACCOUNT TO ROLE developer_debugging;
使用 ALTER SESSION 命令设置当前会话的 TRACE_LEVEL 参数。
USE ROLE developer_debugging; ALTER SESSION SET TRACE_LEVEL = ALWAYS;
如果针对当前会话及该会话中调用的函数和过程将 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;
如果同时在会话和对象参数层次结构中设置了 TRACE_LEVEL 参数,则使用最详细的 TRACE_LEVEL。换句话说, ALWAYS
替换 ON_EVENT
和 OFF
; ON_EVENT
替换 OFF
。
在以下示例中,使用 ALWAYS 跟踪级别,因为 ALWAYS 比 OFF 更详细。
ALTER SESSION SET TRACE_LEVEL = ALWAYS;
ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;