启用分析

可以在以下三个范围内启用分析:

Vertica 元函数 SHOW_PROFILING_CONFIG 显示是否在全局范围和会话范围内启用分析。在以下示例中,该函数显示在当前会话的所有类别中禁用了分析,并在所有类别中全局启用了分析:

=> 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)

全局分析

当为给定类别启用或禁用全局分析时,该设置将在所有数据库会话中保留。可以使用 ALTER DATABASE 设置全局分析,如下所示:

ALTER DATABASE db-spec SET profiling-category = {0 | 1}

profiling-category 使用以下实参之一指定分析类别:

例如,以下语句对当前 (DEFAULT) 数据库全局启用查询分析:

=> ALTER DATABASE DEFAULT SET GlobalQueryProfiling = 1;

会话分析

可以为当前会话启用会话分析,并一直持续到您显式禁用分析或会话结束。可以使用以下 Vertica 元函数设置会话分析:

profiling-type 使用以下实参之一指定要启用或禁用的分析数据的类型:

例如,以下语句为每个查询的执行运行启用会话范围分析:

=> SELECT ENABLE_PROFILING('ee');
   ENABLE_PROFILING
----------------------
 EE Profiling Enabled
(1 row)

语句分析

可以通过在单个 SQL 语句前面加上关键字 PROFILE,来启用对这些语句的分析。可以分析 SELECT 语句或任何 DML 语句(例如 INSERTUPDATECOPYMERGE)。有关详细信息,请参阅分析单个语句

分析范围的优先级

Vertica 按优先级降序在以下范围内检查会话和查询分析:

  1. 语句分析(最高)

  2. 会话分析(如果启用了全局分析,则忽略)

  3. 全局分析(最低)

无论查询和会话分析设置如何,Vertica 始终在相关系统表中保存最少量的分析数据:QUERY_PROFILESQUERY_PLAN_PROFILESSESSION_PROFILES

对于执行引擎分析,Vertica 首先检查配置参数 SaveDCEEProfileThresholdUS 的设置。如果查询运行时间超过指定阈值(默认为 60 秒),Vertica 会收集该查询的执行引擎数据,并将其保存到系统表 QUERY_CONSUMPTION执行_引擎_配置文件 中。仅当查询的持续时间低于阈值时,Vertica 才使用其他范围(语句、会话、全局)的分析设置。