这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
分析工作负载
如果查询性能欠佳,请使用工作负载分析器获取相关的优化建议,以及有关优化数据库对象的提示。工作负载分析器是一个 Vertica 实用程序,可用于分析 Vertica 系统表 中的系统信息。
工作负载分析器将通过智能监控查询的执行情况、工作负载历史记录、资源和配置,来识别查询性能欠佳的根本原因。它将返回一组优化建议,这些建议基于统计信息、系统和
数据收集器事件以及数据库/表/投影设计的组合。使用这些建议可以快速轻松地优化查询性能。
您可以通过两种方式运行工作负载分析器:
有关工作负载分析器发现的常见问题和相关建议,请参阅工作负载分析器建议。
1 - 获取优化建议
可以调用
ANALYZE_WORKLOAD
以获取有关查询和数据库对象的优化建议。使用函数实参指定要分析哪些事件以及何时进行分析。
设置分析范围和时间范围
ANALYZE_WORKLOAD
的 scope
实参确定要分析的内容:
可选 since‑time
实参用于指定从自 since‑time
开始的所有范围内事件返回值,并继续保持当前系统状态。如果省略 since_time
,ANALYZE_WORKLOAD
将返回有关自记录的上次调用函数的时间以来的事件的建议。必须将 since‑time
字符串值显式转换为 TIMESTAMP
或 TIMESTAMPTZ
。
以下示例显示了四种用不同格式表达 since‑time
实参的方法。对于自 2012 年 10 月 4 日以来表 t1
的工作负载,所有查询都返回相同的结果:
=> SELECT ANALYZE_WORKLOAD('t1', TIMESTAMP '2012-10-04 11:18:15');
=> SELECT ANALYZE_WORKLOAD('t1', '2012-10-04 11:18:15'::TIMESTAMPTZ);
=> SELECT ANALYZE_WORKLOAD('t1', 'October 4, 2012'::TIMESTAMP);
=> SELECT ANALYZE_WORKLOAD('t1', '10-04-12'::TIMESTAMPTZ);
保存函数结果
通过将 ANALYZE_WORKLOAD
的第二个实参设置为 true
,可以保存该函数的结果,而无需分析自特定时间以来的事件。默认值为 false
,且不保存任何结果。保存函数结果之后,ANALYZE_WORKLOAD
的随后调用仅分析自上次保存已返回的数据以来的事件,并忽略所有先前的事件。
例如,以下语句返回架构中所有数据库对象的建议,并记录此分析调用。
=> SELECT ANALYZE_WORKLOAD('', true);
下一次调用 ANALYZE_WORKLOAD
时,将分析自此点以后的事件。
观察值计数和时间
observation_count
列返回一个整数,表示工作负载分析器为此优化建议观察到的事件总数。对于上述每种情况,工作负载分析器都会提出第一项建议。observation_time
中的 Null 结果表示仅该建议来自当前系统状态,而不是来自之前的事件。
优化目标
tuning_parameter
列返回工作负载分析器建议您对其应用优化操作的对象。上述示例中的 release
参数通知 DBA 为用户版本设置密码。
优化建议和成本
工作负载分析器的输出将在 tuning_description
列返回您应当考虑的任务的简短描述并在适当时,在 tuning_command column
列返回可以运行的 SQL 命令。在上述记录 1 和 2 中,工作负载分析器建议您在两个表上运行
Database Designer,并建议在记录 3 中设置用户密码。注意,记录 3 还提供可运行的 ALTER USER
命令,因为优化操为 SQL 命令。
tuning_cost
列中的输出指示运行建议的优化命令所需的成本:
示例
以下语句要求工作负载分析器分析 locations
表的所有事件:
=> SELECT ANALYZE_WORKLOAD('locations');
工作负载分析器返回建议,建议您在表中运行 Database Designer。根据 locations
的大小,该操作可能会产生较高的成本:
-[ RECORD 1 ]----------+------------------------------------------------
observation_count | 1
first_observation_time |
last_observation_time |
tuning_parameter | public.locations
tuning_description | run database designer on table public.locations
tuning_command |
tuning_cost | HIGH
以下语句将分析今天之前一周以来 VMart 示例数据库中所有表上的工作负载:
=> SELECT ANALYZE_WORKLOAD('', NOW() - INTERVAL '1 week');
工作负载分析器返回以下结果:
-[ RECORD 1 ]----------+------------------------------------------------------
observation_count | 4
first_observation_time | 2012-02-17 13:57:17.799003-04
last_observation_time | 2011-04-22 12:05:26.856456-04
tuning_parameter | store.store_orders_fact.date_ordered
tuning_description | analyze statistics on table column store.store_orders_fact.date_ordered
tuning_command | select analyze_statistics('store.store_orders_fact.date_ordered');
tuning_cost | MEDIUM
-[ RECORD 2 ]---------+------------------------------------------------------
...
-[ RECORD 14 ]---------+-----------------------------------------------------
observation_count | 2
first_observation_time | 2012-02-19 17:52:03.022644-04
last_observation_time | 2012-02-19 17:52:03.02301-04
tuning_parameter | SELECT x FROM t WHERE x > (SELECT SUM(DISTINCT x) FROM
| t GROUP BY y) OR x < 9;
tuning_description | consider incremental design on query
tuning_command |
tuning_cost | HIGH
工作负载分析器发现两个问题:
-
在记录 1 中,store.store_orders_fact table
中的 date_ordered
列可能具有过时的统计信息,因此工作负载分析器建议对该列运行
ANALYZE_STATISTICS
。函数输出还会返回要运行的查询。例如:
=> SELECT ANALYZE_STATISTICS('store.store_orders_fact.date_ordered');
-
在记录 14 中,工作负载分析器在 tuning_parameter
列中识别出性能欠佳的查询。建议使用 Database Designer 运行增量设计。工作负载分析器将潜在成本评定为 HIGH
。
系统表建议
还可以通过查询系统表
TUNING_RECOMMENDATIONS
获取优化建议,这样将从上一次 ANALYZE_WORKLOAD
调用返回优化建议结果。
=> SELECT * FROM tuning_recommendations;
工作负载分析器用于其建议的系统信息保留在 SQL 系统表中,因此查询 TUNING_RECOMMENDATIONS
系统表不会运行工作负载分析器。
另请参阅
收集数据库统计信息
2 - 工作负载分析器建议
工作负载分析器将监控数据库活动,并根据需要将建议记录在系统表 TUNING_RECOMMENDATIONS 中。运行工作负载分析器时,该实用程序会返回以下信息:
-
需要优化的对象的描述
-
建议操作
-
用于实施建议的 SQL 命令
常见问题和建议