Enabling profiling
You can enable profiling at three scopes:
Vertica meta-function
SHOW_PROFILING_CONFIG
shows whether profiling is enabled at global and session scopes. In the following example, the function shows that profiling is disabled across all categories for the current session, and enabled globally across all categories:
=> SELECT SHOW_PROFILING_CONFIG();
SHOW_PROFILING_CONFIG
------------------------------------------
Session Profiling: Session off, Global on
EE Profiling: Session off, Global on
Query Profiling: Session off, Global on
(1 row)
Global profiling
When global profiling is enabled or disabled for a given category, that setting persists across all database sessions. You set global profiling with
ALTER DATABASE
, as follows:
ALTER DATABASE db-spec SET profiling-category = {0 | 1}
profiling-category
specifies a profiling category with one of the following arguments:
Argument | Data profiled |
---|---|
GlobalQueryProfiling |
Query-specific information, such as query string and duration of execution, divided between two system tables: |
GlobalSessionProfiling |
General information about query execution on each node during the current session, stored in system table
SESSION_PROFILES . |
GlobalEEProfiling |
Execution engine data, saved in system tables
QUERY_CONSUMPTION and
EXECUTION_ENGINE_PROFILES . |
For example, the following statement globally enables query profiling on the current (DEFAULT
) database:
=> ALTER DATABASE DEFAULT SET GlobalQueryProfiling = 1;
Session profiling
Session profiling can be enabled for the current session, and persists until you explicitly disable profiling, or the session ends. You set session profiling with the following Vertica meta-functions:
ENABLE_PROFILING ( profiling-type )
DISABLE_PROFILING ( profiling-type )
profiling-type
specifies type of profiling data to enable or disable with one of the following arguments:
Argument | Data profiled |
---|---|
query |
Query-specific information, such as query string and duration of execution, divided between two system tables: |
session |
General information about query execution on each node during the current session, stored in system table
SESSION_PROFILES . |
ee |
Execution engine data, saved in system tables
QUERY_CONSUMPTION and
EXECUTION_ENGINE_PROFILES . |
For example, the following statement enables session-scoped profiling for the execution run of each query:
=> SELECT ENABLE_PROFILING('ee');
ENABLE_PROFILING
----------------------
EE Profiling Enabled
(1 row)
Statement profiling
You can enable profiling for individual SQL statements by prefixing them with the keyword
PROFILE
. You can profile a SELECT
statement, or any DML statement such as
INSERT
,
UPDATE
,
COPY
, and
MERGE
. For detailed information, see Profiling single statements.
Precedence of profiling scopes
Vertica checks session and query profiling at the following scopes in descending order of precedence:
-
Statement profiling (highest)
-
Sesssion profiling (ignored if global profiling is enabled)
-
Global profiling (lowest)
Regardless of query and session profiling settings, Vertica always saves a minimum amount of profiling data in the pertinent system tables: QUERY_PROFILES
, QUERY_PLAN_PROFILES
, and SESSION_PROFILES
.
For execution engine profiling, Vertica first checks the setting of configuration parameter SaveDCEEProfileThresholdUS
. If the query runs longer than the specified threshold (by default, 60 seconds), Vertica gathers execution engine data for that query and saves it to system tables
QUERY_CONSUMPTION
and
EXECUTION_ENGINE_PROFILES
. Vertica uses profiling settings of other scopes (statement, session, global) only if the query's duration is below the threshold.
Important
To disable or minimize execution engine profiling:
-
Set
SaveDCEEProfileThresholdUS
to a very high value, up to its maximum value of 2147483647 (231-1, or ~35.79 minutes). -
Disable profiling at session and global scopes.