トレースレベルの設定¶
TRACE_LEVEL パラメーターを使用すると、イベントテーブルに格納されているイベントトレースデータの詳細度を管理できます。
TRACE_LEVEL は、 オブジェクト パラメーターと セッション パラメーターの両方です。つまり、オブジェクトとセッションにパラメーターを設定できます。
トレースレベルについて¶
TRACE_LEVEL パラメーターを使用して、イベントテーブルに格納されるトレースイベントの範囲を指定できます。TRACE_LEVEL パラメーターは、次のいずれかの値に設定できます。
- OFF:
スパンやトレースイベントを記録しません。
- ALWAYS:
すべてのスパンとトレースイベントを記録します。
- ON_EVENT:
トレースイベントが記録されるのは、ストアドプロシージャまたは UDFs が明示的にイベントを追加した場合 のみ です。
オブジェクトのトレースレベルの設定¶
次のオブジェクトにトレースレベルを設定できます。
ストアドプロシージャ
ユーザー定義関数(UDF)
ストアドプロシージャまたは UDFs を含むデータベースまたはスキーマ
オブジェクトのトレースレベルを設定するには、次を実行します。
オブジェクトにトレースレベルを設定する権限を持っていることを確認します。
次の権限が付与または継承されたロールを使用する必要があります。
アカウントに対する MODIFY TRACE LEVEL グローバル権限
TRACE_LEVEL を設定するオブジェクトに対する MODIFY 権限
たとえば、アカウント内にある任意のデータベース、スキーマ、ストアドプロシージャ、または UDF のトレースレベルを設定する権限を
central_event_admin
ロール(central_event_admin
ロールに他の権限がないものも含む)に付与するには、次のステートメントを実行します。GRANT MODIFY TRACE LEVEL ON ACCOUNT TO ROLE central_event_admin;
ストアドプロシージャまたは UDF にトレースレベルを設定するには、ストアドプロシージャまたは UDF を含むデータベースおよびスキーマに対する USAGE 権限もロールに付与されている必要があることに注意してください。
ALTER <オブジェクト> コマンドを使用して、オブジェクトに 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;
TRACE_LEVEL がさまざまなオブジェクトに設定されている場合に、Snowflakeが有効なトレースレベルを決定する方法の詳細については、 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 は、 オブジェクトパラメーター と セッションパラメーター の両方です。
セッションパラメーター型とオブジェクトパラメーター型の両方に レベルの階層 があり、より高いレベルで設定されているパラメーターで上書きできます。
セッションパラメーターの場合、階層はアカウント » ユーザー » セッションです。
これは、アカウントのパラメーターを設定したり、ユーザーのアカウントレベルのパラメーターを上書きしたり、現在のセッションにおけるユーザーレベルのパラメーターを上書きしたりできることを意味します。
オブジェクトパラメーターの場合、階層はアカウント » データベース » スキーマ » オブジェクトです。
これは、アカウントのパラメーターを設定したり、データベースまたはスキーマのアカウントレベルのパラメーターを上書きしたり、そのデータベースまたはスキーマ内にある、特定のストアドプロシージャや 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;
セッションパラメーター層とオブジェクトパラメーター層の両方で TRACE_LEVEL が設定されている場合は、最も詳細な TRACE_LEVEL が使用されます。つまり、 ALWAYS
は ON_EVENT
と OFF
を上書きし、 ON_EVENT
は OFF
を上書きします。
次の例では、 ALWAYS の方が OFF よりも詳細であるため、 ALWAYS トレースレベルが使用されます。
ALTER SESSION SET TRACE_LEVEL = ALWAYS;
ALTER FUNCTION MY_UDF SET TRACE_LEVEL = OFF;