Réglage du niveau de trace

Vous pouvez utiliser le paramètre TRACE_LEVEL pour gérer la verbosité des données de trace d’événement stockées dans la table des événements.

TRACE_LEVEL est à la fois un paramètre objets et un paramètre sessions, ce qui signifie que vous pouvez définir le paramètre sur les objets et les sessions.

Comprendre les niveaux de trace

Le paramètre TRACE_LEVEL permet de spécifier l’étendue des événements de trace stockés dans la table des événements. Vous pouvez définir le paramètre TRACE_LEVEL sur l’une des valeurs suivantes :

OFF:

N’enregistrer aucun span ni trace d’événement.

ALWAYS:

Enregistrer tous les spans et les événements de trace.

ON_EVENT:

Enregistrer les événements de trace uniquement lorsque vos procédures stockées ou UDFs ajoutent explicitement des événements.

Réglage du niveau de trace d’un objet

Vous pouvez définir le niveau de trace pour les objets suivants :

  • Une procédure stockée

  • Une fonction définie par l’utilisateur (UDF)

  • Une base de données ou un schéma contenant des procédures stockées et des UDFs

Pour définir le niveau de trace d’un objet, procédez comme suit :

  1. Vérifiez que vous avez le privilège de définir le niveau de trace de l’objet.

    Vous devez utiliser un rôle qui bénéficie des privilèges globaux suivants ou qui en hérite :

    • Le privilège global MODIFY TRACE LEVEL sur le compte.

    • Le privilège MODIFY sur l’objet pour lequel vous voulez définir TRACE_LEVEL

    Par exemple, pour accorder au rôle central_event_admin le privilège de définir le niveau de trace sur toute base de données, tout schéma, toute procédure stockée, ou UDF dans le compte (même ceux pour lesquels le rôle central_event_admin n’a pas d’autres privilèges), exécutez l’instruction suivante :

    GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
    
    Copy

    Notez que pour définir le niveau de trace sur une procédure stockée ou une UDF, le rôle doit également disposer du privilège USAGE sur la base de données et le schéma contenant la procédure stockée ou l’UDF.

  2. Utilisez la commande ALTER <objet> pour définir le paramètre TRACE_LEVEL sur l’objet.

    Par exemple, pour définir le niveau de trace pour une UDF spécifique, utilisez ALTER FUNCTION pour définir le paramètre TRACE_LEVEL pour cette UDF. Autre exemple, pour définir le niveau de trace par défaut pour toutes les fonctions et procédures d’une base de données, utilisez ALTER DATABASE pour définir le paramètre TRACE_LEVEL sur cette base de données.

    L’exemple suivant définit le niveau de trace sur ON_EVENT pour toutes les fonctions et procédures de la base de données db1. L’exemple remplace ensuite le niveau de trace par ALWAYS pour l’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

    Pour plus de détails sur la façon dont Snowflake détermine le niveau de trace effectif lorsque le TRACE_LEVEL est défini sur différents objets, voir Comprendre comment Snowflake détermine le niveau de trace effectif.

Définition du niveau de trace pour la session en cours

Pour définir le niveau de trace des appels aux fonctions et procédures effectués dans la session en cours :

  1. Vérifiez que vous avez le privilège de définir le niveau de trace de l’objet.

    Vous devez utiliser un rôle qui bénéficie du privilège global MODIFY SESSION TRACE LEVEL ou qui en hérite.

    Par exemple, pour accorder au rôle developer_debugging le privilège de définir les niveaux de trace pour la session en cours, exécutez l’instruction suivante :

    GRANT MODIFY SESSION TRACE LEVEL ON ACCOUNT TO ROLE developer_debugging;
    
    Copy
  2. Utilisez la commande ALTER SESSION pour définir le paramètre TRACE_LEVEL de la session en cours.

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

Si le paramètre TRACE_LEVEL est défini sur différents niveaux pour la session en cours et pour les fonctions et procédures appelées dans cette session, Snowflake détermine le niveau de trace effectif à utiliser. Voir Comprendre comment Snowflake détermine le niveau de trace effectif.

Comprendre comment Snowflake détermine le niveau de trace effectif

TRACE_LEVEL est à la fois un paramètre d’objet et un paramètre de session.

Les types de paramètres de session et d’objets ont une hiérarchie de niveaux qui vous permet de remplacer un paramètre défini à un niveau supérieur :

  • Pour les paramètres de session, la hiérarchie est Compte » Utilisateur » Session.

    Cela signifie que vous pouvez définir le paramètre pour un compte, remplacer le paramètre au niveau du compte pour un utilisateur et remplacer le paramètre au niveau de l’utilisateur pour la session en cours.

  • Pour les paramètres de l’objet, la hiérarchie est Compte » Base de données » Schéma » Objet.

    Cela signifie que vous pouvez définir le paramètre pour un compte, remplacer le paramètre au niveau du compte pour une base de données ou un schéma, et remplacer le paramètre au niveau de la base de données ou du schéma pour des procédures stockées spécifiques et des UDFs dans cette base de données ou ce schéma.

Par exemple, le TRACE_LEVEL d’une fonction remplace le TRACE_LEVEL du compte qui contient la fonction. Si le TRACE_LEVEL du compte est ON_EVENT et le TRACE_LEVEL de l’UDF du compte est ALWAYS, le TRACE_LEVEL effectif est ALWAYS (le niveau de la fonction, pas du compte).

Dans l’exemple suivant, le niveau de trace ALWAYS est utilisé parce que la fonction MY_UDF est inférieure à la fonction ACCOUNT dans la hiérarchie.

ALTER ACCOUNT SET TRACE_LEVEL = ON_EVENT;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = ALWAYS;
Copy

Dans les cas où le TRACE_LEVEL est défini à la fois dans les hiérarchies de paramètres de session et d’objet, le paramètre TRACE_LEVEL le plus verbeux est utilisé. En d’autres termes, ALWAYS est prioritaire sur ON_EVENT et OFF ; ON_EVENT est prioritaire sur OFF.

Dans l’exemple suivant, le niveau de trace ALWAYS est utilisé car ALWAYS est plus verbeux que OFF.

ALTER SESSION SET TRACE_LEVEL = ALWAYS;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;
Copy