查询计划管理的函数参考
apg_plan_mgmt
扩展提供以下函数。
函数
apg_plan_mgmt.delete_plan
删除托管计划。
语法
apg_plan_mgmt.delete_plan( sql_hash, plan_hash )
返回值
如果删除成功则返回 0,如果删除失败则返回 -1。
参数
参数 | 说明 |
---|---|
sql_hash
|
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。
|
apg_plan_mgmt.evolve_plan_baselines
验证已经批准的计划速度是否更快,或者查询优化程序确定作为最低成本计划的计划是否速度更快。
语法
apg_plan_mgmt.evolve_plan_baselines( sql_hash, plan_hash, min_speedup_factor, action )
返回值
速度比最佳已批准计划要慢的计划数量。
参数
参数 | 说明 |
---|---|
sql_hash |
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。使用 NULL 表示所有计划具有相同的 sql_hash ID 值。
|
min_speedup_factor |
最低加速系数可能是计划必须比已经批准的最佳计划要快的倍数,达到此数字才能批准计划。或者,此系数可以是比计划必须达到才能拒绝或禁用它的速度慢的倍数。 这是正浮点数值。 |
action |
函数执行的操作。包括下列有效值。大小写没有影响。
|
使用说明
根据规划加上执行时间是否比最佳已批准计划速度快(达到您设置的系数),将特定计划设置为已批准、已拒绝或已禁用。操作参数可以设置为 'approve'
或 'reject'
以自动批准或拒绝满足性能标准的计划。此外,可以将其设置为 ''(空字符串)以进行性能试验并生成报告,但不采取操作。
您可以避免无目标地为 apg_plan_mgmt.evolve_plan_baselines
函数近期在其中运行的计划重新运行此函数。要这样做,将计划限制为仅近期创建的未批准计划。此外,您可以避免在任何具有近期 last_verified
时间戳的已批准计划上运行 apg_plan_mgmt.evolve_plan_baselines
函数。
开展性能试验,以将各个计划的规划加上执行时间,相对于基线中的其他计划进行比较。部分情况下,某个语句只有一个计划并且该计划已批准。在这种情况下,将计划的规划加上执行时间,与不使用计划时的规划加上执行时间进行比较。
各个计划增加的好处(或坏处)记录在 apg_plan_mgmt.dba_plans
视图的 total_time_benefit_ms
列中。当此值为正数时,有可衡量的性能优势,可以将此计划包括在基线内。
除了收集各个候选计划的规划和执行时间之外,使用 current_timestamp
来更新 apg_plan_mgmt.dba_plans
视图的 last_verified
列。last_verified
时间戳可用于避免对某个最近已经验证了其性能的计划,再次运行此函数。
apg_plan_mgmt.plan_last_used
从共享内存返回指定计划的 last_used
日期。
语法
apg_plan_mgmt.plan_last_used( sql_hash, plan_hash )
返回值
返回 last_used
日期。
参数
参数 | 说明 |
---|---|
sql_hash
|
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。
|
apg_plan_mgmt.reload
将计划从 apg_plan_mgmt.dba_plans
视图重新加载到共享内存中。
语法
apg_plan_mgmt.reload()
返回值
无。
参数
无。
使用说明
对于以下情况,调用 reload
:
-
使用它来立即刷新只读副本的共享内存,而不是等待新计划传播到副本。
-
在导入托管计划后使用它。
apg_plan_mgmt.set_plan_enabled
启用或禁用托管计划。
语法
apg_plan_mgmt.set_plan_enabled( sql_hash, plan_hash, [true | false] )
返回值
如果设置成功则返回 0,如果设置失败则返回 -1。
参数
参数 | 说明 |
---|---|
sql_hash |
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。
|
enabled |
布尔值 true 或 false:
|
apg_plan_mgmt.set_plan_status
将托管计划的状态设置为已批准、未批准、已拒绝或首选。
语法
apg_plan_mgmt.set_plan_status( sql_hash, plan_hash, status )
返回值
如果设置成功则返回 0,如果设置失败则返回 -1。
参数
参数 | 说明 |
---|---|
sql_hash |
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。
|
status |
具有以下值之一的字符串;与大小写无关:
有关这些值的更多信息,请参阅 apg_plan_mgmt.dba_plans 视图参考中的 |
apg_plan_mgmt.validate_plans
验证优化程序仍可重新创建计划。优化程序验证已批准、未批准和首选计划,不论该计划已启用还是已禁用。不验证已拒绝计划。(可选)您可以使用 apg_plan_mgmt.validate_plans
函数来删除或禁用无效计划。
语法
apg_plan_mgmt.validate_plans( sql_hash, plan_hash, action) apg_plan_mgmt.validate_plans( action)
返回值
无效计划的数量。
参数
参数 | 说明 |
---|---|
sql_hash |
计划的托管 SQL 语句的 sql_hash ID。
|
plan_hash |
托管计划的 plan_hash ID。使用 NULL 表示同一个 sql_hash ID 值的所有计划。
|
action |
函数为无效计划执行的操作。有效字符串值如下所示。大小写没有影响。
任何其他值作为空字符串处理。 |
使用说明
使用格式 validate_plans(action)
来验证整个 apg_plan_mgmt.dba_plans
视图中,所有托管语句的所有托管计划。
使用格式 validate_plans(sql_hash, plan_hash, action)
,为使用 sql_hash
指定的托管语句,验证以 plan_hash
指定的托管计划。
使用格式 validate_plans(sql_hash, NULL, action)
来验证使用 sql_hash
指定的托管语句的所有托管计划。