Configuração do nível de rastreamento

Você pode usar o parâmetro TRACE_LEVEL para gerenciar o detalhamento dos dados de rastreamento de eventos armazenados na tabela de eventos.

TRACE_LEVEL é tanto um parâmetro de objetos quanto um parâmetro de sessões, o que significa que você pode definir o parâmetro em objetos e sessões.

Como entender os níveis de rastreamento

Por meio do parâmetro TRACE_LEVEL, você pode especificar o escopo dos eventos de rastreamento armazenados na tabela de eventos. Você pode definir o parâmetro TRACE_LEVEL como um dos seguintes valores:

OFF:

Não registra nenhum evento de rastreamento ou spans.

ALWAYS:

Registra todos os eventos de rastreamento e spans.

ON_EVENT:

Registra eventos de rastreamento apenas quando os procedimentos armazenados ou UDFs adicionarem eventos explicitamente.

Definição do nível de rastreamento em um objeto

Você pode definir o nível de rastreamento nos seguintes objetos:

  • Um procedimento armazenado

  • Uma função definida pelo usuário (UDF)

  • Um banco de dados ou esquema que contém procedimentos armazenados e UDFs

Para definir o nível de rastreamento em um objeto, faça o seguinte:

  1. Verifique se você tem o privilégio para definir o nível de rastreamento no objeto.

    Você deve usar uma função que receba ou herde os seguintes privilégios:

    • O privilégio global MODIFY TRACE LEVEL na conta.

    • O privilégio MODIFY no objeto para o qual você deseja definir TRACE_LEVEL

    Por exemplo, para conceder à função central_event_admin o privilégio de definir o nível de rastreamento em qualquer banco de dados, esquema, procedimento armazenado ou UDF na conta (mesmo aqueles para os quais a função central_event_admin não tem outros privilégios), execute a seguinte instrução:

    GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
    
    Copy

    Observe que, para definir o nível de rastreamento em um procedimento armazenado ou UDF, a função também deve ter o privilégio USAGE no banco de dados e no esquema que contém o procedimento armazenado ou UDF.

  2. Use o comando ALTER <objeto> para definir o parâmetro TRACE_LEVEL no objeto.

    Por exemplo, para definir o nível de rastreamento para uma UDF específica, use ALTER FUNCTION para definir o parâmetro TRACE_LEVEL para essa UDF. Como outro exemplo, para definir o nível de rastreamento padrão para todas as funções e procedimentos em um banco de dados, use ALTER DATABASE para definir o parâmetro TRACE_LEVEL nesse banco de dados.

    O exemplo a seguir define o nível de rastreamento como ON_EVENT para todas as funções e procedimentos no banco de dados db1. Em seguida, o exemplo substitui o nível de rastreamento para ALWAYS da UDF f1(int).

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

    Para obter mais detalhes sobre como o Snowflake determina o nível de rastreamento efetivo quando o TRACE_LEVEL é definido em objetos diferentes, consulte Como o Snowflake determina o nível de rastreamento efetivo.

Definição do nível de rastreamento da sessão atual

Para definir o nível de rastreamento de chamadas para funções e procedimentos feitos na sessão atual:

  1. Verifique se você tem o privilégio para definir o nível de rastreamento no objeto.

    Você deve usar uma função que tenha recebido ou herdado o privilégio MODIFY SESSION TRACE LEVEL.

    Por exemplo, para conceder à função developer_debugging o privilégio de definir os níveis de rastreamento da sessão atual, execute a seguinte instrução:

    GRANT MODIFY SESSION TRACE LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. Use o comando ALTER SESSION para definir o parâmetro TRACE_LEVEL para a sessão atual.

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

Se o parâmetro TRACE_LEVEL for definido como níveis diferentes para a sessão atual e nas funções e procedimentos chamados nessa sessão, o Snowflake determinará o nível de rastreamento efetivo a ser usado. Consulte Como o Snowflake determina o nível de rastreamento efetivo.

Como o Snowflake determina o nível de rastreamento efetivo

TRACE_LEVEL é um parâmetro de objeto e um parâmetro de sessão.

Tanto os tipos parâmetro de sessão quanto os de parâmetro de objeto têm uma hierarquia de níveis que permite substituir um parâmetro definido em um nível mais alto:

  • Para parâmetros de sessão, a hierarquia é Conta » Usuário » Sessão.

    Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro no nível da conta para um usuário e substituir o parâmetro no nível do usuário para a sessão atual.

  • Para parâmetros de objeto, a hierarquia é Conta » Banco de dados » Esquema » Objeto.

    Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro em nível de conta para um banco de dados ou esquema e substituir o parâmetro em nível de banco de dados ou esquema para procedimentos armazenados específicos e UDFs nesse banco de dados ou esquema.

Por exemplo, o TRACE_LEVEL de uma função substitui o TRACE_LEVEL da conta que contém a função. Se o TRACE_LEVEL da conta for ON_EVENT e o TRACE_LEVEL de uma UDF na conta for ALWAYS, o TRACE_LEVEL efetivo será ALWAYS (o nível da função, não da conta).

No exemplo a seguir, o nível de rastreamento ALWAYS é usado porque a função MY_UDF é inferior à ACCOUNT na hierarquia.

ALTER ACCOUNT SET TRACE_LEVEL = ON_EVENT;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = ALWAYS;
Copy

Nos casos em que TRACE_LEVEL é definido nas hierarquias de parâmetros da sessão e do objeto, o TRACE_LEVEL mais detalhado é usado. Em outras palavras, ALWAYS substitui ON_EVENT e OFF; ON_EVENT substitui OFF.

No exemplo a seguir, o nível de rastreamento ALWAYS é usado porque ALWAYS é mais detalhado do que OFF.

ALTER SESSION SET TRACE_LEVEL = ALWAYS;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;
Copy