此部分包含 Vertica 专用的工作负载管理函数。
工作负载管理函数
- 1: ANALYZE_WORKLOAD
- 2: CHANGE_CURRENT_STATEMENT_RUNTIME_PRIORITY
- 3: CHANGE_RUNTIME_PRIORITY
- 4: MOVE_STATEMENT_TO_RESOURCE_POOL
- 5: SLEEP
1 - ANALYZE_WORKLOAD
运行工作负载分析器,这是一款用于分析系统表中包含的系统信息的实用程序。
工作负载分析器可智能监控 SQL 查询的性能和工作负载历史记录、资源和配置,以确定查询性能低下的根本原因。 ANALYZE_WORKLOAD
从系统表
TUNING_RECOMMENDATIONS
返回您指定的范围和时间内的所有事件的优化建议。
优化建议基于统计信息、系统、 数据收集器事件和数据库-表-投影组合设计。工作负载分析器建议有助于快速轻松地优化查询性能。
有关常见的触发条件和建议,请参阅 工作负载分析器建议。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ANALYZE_WORKLOAD ( '[ scope ]' [, 'since‑time' | save‑data ] );
参数
- scope
- 指定要分析的编录对象,如下所示:
[[database.]schema.]table
如果设置为空字符串,Vertica 将返回所有数据库对象的建议。
如果指定一个数据库,它必须是当前数据库。
- since‑time
- 指定分析时间范围的开始时间,时间范围一直持续到当前系统状态(包含)。如果省略此参数,"ANALYZE_WORKLOAD" 将返回自上次调用此函数以来的事件的建议。
注意
必须将字符串显式转换为
TIMESTAMP
或TIMESTAMPTZ
。例如:SELECT ANALYZE_WORKLOAD('T1', '2010-10-04 11:18:15'::TIMESTAMPTZ); SELECT ANALYZE_WORKLOAD('T1', TIMESTAMPTZ '2010-10-04 11:18:15');
- save‑data
- 指定是否保存
ANALYZE_WORKLOAD
的返回值:-
false
(默认值):将丢弃结果。 -
true
:保存ANALYZE_WORKLOAD
返回的结果。对ANALYZE_WORKLOAD
的后续调用返回从保存结果时最后一次调用开始的结果。该调用之前的对象事件将被忽略。
-
返回值
从
TUNING_RECOMMENDATIONS
返回聚合优化建议。
超级用户
示例
请参阅获取优化建议。
另请参阅
2 - CHANGE_CURRENT_STATEMENT_RUNTIME_PRIORITY
更改活动查询的运行时优先级。
注意
此函数将取代已弃用的函数CHANGE_RUNTIME_PRIORITY
。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CHANGE_CURRENT_STATEMENT_RUNTIME_PRIORITY(transaction-id, 'value')
参数
- transaction‑id
- 标识从系统表
SESSIONS
获取的事务。 -
value
RUNTIMEPRIORITY
值:HIGH
、MEDIUM
或LOW
。
特权
-
超级用户:无
-
非超级用户只能更改自身查询的运行时优先级,不能提高查询的运行时优先级使其高于资源池级别。
示例
请参阅更改正在运行的查询的运行时优先级。
3 - CHANGE_RUNTIME_PRIORITY
更改主动运行查询的运行时优先级。请注意,虽然此函数仍然有效,但您应使用 CHANGE_CURRENT_STATEMENT_RUNTIME_PRIORITY
来更改运行时优先级。 CHANGE_RUNTIME_PRIORITY
将在未来版本的 Vertica 中弃用。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
CHANGE_RUNTIME_PRIORITY(TRANSACTION_ID,STATEMENT_ID, 'value')
参数
TRANSACTION_ID
- 会话中事务的标识符。
TRANSACTION_ID
不能为 NULL。您可以在“会话”表中找到事务 ID。
STATEMENT_ID
- 由 Vertica 编录分配的唯一数字 ID,可识别当前执行的语句。
您可以在“会话”表中找到语句 ID。
您可以指定 NULL,以更改事务中当前正在运行的查询的运行时优先级。
'value'
RUNTIMEPRIORITY
值。可以为 HIGH、MEDIUM 或 LOW。
特权
不需要特殊权限。但是,非超级用户只能改他们自己查询的运行时优先级。另外,非超级用户不能将查询的运行时优先级提高至高于资源池的优先级。
示例
=> SELECT CHANGE_RUNTIME_PRIORITY(45035996273705748, NULL, 'low');
4 - MOVE_STATEMENT_TO_RESOURCE_POOL
尝试将指定查询移动至指定目标池。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
MOVE_STATEMENT_TO_RESOURCE_POOL (session_id , transaction_id, statement_id, target_resource_pool_name)
参数
session_id
- 您想要移动的查询正在执行所的会话标识。
transaction_id
- 会话内事务标识。
statement_id
- 您想要移动的语句的唯一数字 ID。
target_resource_pool_name
- 您想将指定查询移至的现存资源池的名称。
输出
函数可能返回下列结果:
超级用户
示例
下面的例子显示如何将指定语句移动至调用 my_target_pool的资源池:
=> SELECT MOVE_STATEMENT_TO_RESOURCE_POOL ('v_vmart_node0001.example.-31427:0x82fbm', 45035996273711993, 1, 'my_target_pool');
另请参阅:
5 - SLEEP
在执行另一个语句或命令之前等待指定的秒数。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
SLEEP( seconds )
参数
seconds
- 等待时间(以一秒或多秒(0 或更高)为单位指定),使用正整数表示。单引号是可选的;例如,
SLEEP(3)
与SLEEP('3')
相同。
注意
-
如果成功执行此函数,返回值 0;否则,因语法错误返回错误消息。
-
不能取消休眠操作。
-
在包含共享资源的环境中使用 SLEEP() 时应当慎重,如结合使用独占锁的事务。
示例
以下命令将暂停执行 100 秒:
=> SELECT SLEEP(100);
sleep
-------
0
(1 row)