トレースレベルの設定

TRACE_LEVEL パラメーターを使用すると、イベントテーブルに格納されているイベントトレースデータの詳細度を管理できます。

TRACE_LEVEL は、 オブジェクト パラメーターと セッション パラメーターの両方です。つまり、オブジェクトとセッションにパラメーターを設定できます。

トレースレベルについて

TRACE_LEVEL パラメーターを使用して、イベントテーブルに格納されるトレースイベントの範囲を指定できます。TRACE_LEVEL パラメーターは、次のいずれかの値に設定できます。

OFF:

スパンやトレースイベントを記録しません。

ALWAYS:

すべてのスパンとトレースイベントを記録します。

ON_EVENT:

トレースイベントが記録されるのは、ストアドプロシージャまたは UDFs が明示的にイベントを追加した場合 のみ です。

オブジェクトのトレースレベルの設定

次のオブジェクトにトレースレベルを設定できます。

  • ストアドプロシージャ

  • ユーザー定義関数(UDF)

  • ストアドプロシージャまたは UDFs を含むデータベースまたはスキーマ

オブジェクトのトレースレベルを設定するには、次を実行します。

  1. オブジェクトにトレースレベルを設定する権限を持っていることを確認します。

    次の権限が付与または継承されたロールを使用する必要があります。

    • アカウントに対する MODIFY TRACE LEVEL グローバル権限

    • TRACE_LEVEL を設定するオブジェクトに対する MODIFY 権限

    たとえば、アカウント内にある任意のデータベース、スキーマ、ストアドプロシージャ、または UDF のトレースレベルを設定する権限を central_event_admin ロール(central_event_admin ロールに他の権限がないものも含む)に付与するには、次のステートメントを実行します。

    GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
    
    Copy

    ストアドプロシージャまたは UDF にトレースレベルを設定するには、ストアドプロシージャまたは UDF を含むデータベースおよびスキーマに対する USAGE 権限もロールに付与されている必要があることに注意してください。

  2. ALTER <オブジェクト> コマンドを使用して、オブジェクトに 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

    TRACE_LEVEL がさまざまなオブジェクトに設定されている場合に、Snowflakeが有効なトレースレベルを決定する方法の詳細については、 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 は、 オブジェクトパラメーターセッションパラメーター の両方です。

セッションパラメーター型とオブジェクトパラメーター型の両方に レベルの階層 があり、より高いレベルで設定されているパラメーターで上書きできます。

  • セッションパラメーターの場合、階層はアカウント » ユーザー » セッションです。

    これは、アカウントのパラメーターを設定したり、ユーザーのアカウントレベルのパラメーターを上書きしたり、現在のセッションにおけるユーザーレベルのパラメーターを上書きしたりできることを意味します。

  • オブジェクトパラメーターの場合、階層はアカウント » データベース » スキーマ » オブジェクトです。

    これは、アカウントのパラメーターを設定したり、データベースまたはスキーマのアカウントレベルのパラメーターを上書きしたり、そのデータベースまたはスキーマ内にある、特定のストアドプロシージャや UDFs のデータベースレベルまたはスキーマレベルのパラメーターを上書きしたりできることを意味します。

たとえば、関数の TRACE_LEVEL は、その関数を含むアカウントの TRACE_LEVEL を上書きします。アカウントの TRACE_LEVEL が ON_EVENT で、アカウント内の UDF の TRACE_LEVEL が ALWAYS の場合、有効な TRACE_LEVEL は ALWAYS です(アカウントではなく関数のレベル)。

次の例では、関数 MY_UDF が階層内で ACCOUNT よりも低いため、 ALWAYS トレースレベルが使用されます。

ALTER ACCOUNT SET TRACE_LEVEL = ON_EVENT;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = ALWAYS;
Copy

セッションパラメーター層とオブジェクトパラメーター層の両方で TRACE_LEVEL が設定されている場合は、最も詳細な TRACE_LEVEL が使用されます。つまり、 ALWAYSON_EVENTOFF を上書きし、 ON_EVENTOFF を上書きします。

次の例では、 ALWAYS の方が OFF よりも詳細であるため、 ALWAYS トレースレベルが使用されます。

ALTER SESSION SET TRACE_LEVEL = ALWAYS;

ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;
Copy