基本任务包括创建STS,加载它,创建SQL Access Advisor任务,然后执行该任务。
下图显示了SQL Access Advisor的基本工作流程。
图25-3使用SQL Access Advisor

通常,通过执行以下步骤来使用SQL Access Advisor:
- 创建一个SQL调优集
SQL Access Advisor的输入工作负载源是一个SQL调整集(STS)。使用
DBMS_SQLTUNE.CREATE_SQLSET
或DBMS_SQLSET.CREATE_SQLSET
创建SQL调整集。“ 创建SQL调优集作为SQL Access Advisor的输入 ”描述了此任务。
- 加载SQL调优集
当基于实际使用的工作负载可用时,SQL Access Advisor的性能最佳。使用
DBMS_SQLTUNE.LOAD_SQLSET
或DBMS_SQLSET.LOAD_SQLSET
用您的工作量填充SQL调整集。“ 用用户定义的工作负载填充SQL优化集 ”描述了此任务。
- 创建和配置任务
在任务中,您定义必须分析的SQL Access Advisor以及分析结果的位置。使用该
DBMS_ADVISOR.CREATE_TASK
过程创建任务。然后,您可以使用该SET_TASK_PARAMETER
过程为任务定义参数,然后使用该过程将任务链接到STSDBMS_ADVISOR.ADD_STS_REF
。“ 创建和配置SQL Access Advisor任务 ”描述了此任务。
- 执行任务
运行该
DBMS_ADVISOR.EXECUTE_TASK
过程以生成建议。每个建议都指定一个或多个动作。例如,建议创建多个实例化视图日志,创建一个实例化视图,然后对其进行分析以收集统计信息。“ 执行SQL Access Advisor任务 ”描述了此任务。
- 查看建议
您可以通过查询数据字典视图来查看建议。
“ 查看SQL Access Advisor任务结果 ”描述了此任务。
- (可选)生成并执行实施建议的SQL脚本。
描述此任务的“ 生成和执行任务脚本 ”。
本节包含以下主题:
- 创建SQL调整集作为SQL Access Advisor的输入SQL Access Advisor的输入工作负载源是STS。
- 用用户定义的工作负载填充SQL调整集工作 负载由一个或多个SQL语句以及完全描述每个语句的统计信息和属性组成。
- 创建和配置SQL Access Advisor任务 使用以下
DBMS_ADVISOR.CREATE_TASK
过程创建SQL Access Advisor任务。 - 执行SQL Access Advisor任务 该
DBMS_ADVISOR.EXECUTE_TASK
过程对指定任务执行SQL Access Advisor分析或评估。 - 查看SQL Access Advisor任务结果 您可以使用几个数据字典视图查看SQL Access Advisor生成的每个建议。
- 生成和执行任务脚本 您可以使用该过程
DBMS_ADVISOR.GET_TASK_SCRIPT
为SQL Access Advisor建议创建SQL语句的脚本。该脚本是一个可以包含可执行SQL文件DROP
,CREATE
和ALTER
报表。
25.2.1创建一个SQL调优集作为SQL Access Advisor的输入
SQL Access Advisor的输入工作负载源是STS。
因为STS是作为单独的实体存储的,所以多个顾问程序任务可以共享它。使用DBMS_SQLTUNE.CREATE_SQLSET
或DBMS_SQLSET.CREATE_SQLSET
过程创建一个STS 。
顾问程序任务引用了STS之后,您将无法删除或修改STS,除非所有顾问程序任务都删除了它们对它的依赖。当删除父顾问程序任务或从顾问程序任务中手动删除工作负载参考时,将删除工作负载参考。
先决条件
创建STS的用户必须已被授予ADMINISTER SQL TUNING SET
特权。要在其他用户拥有的SQL调整集上运行SQL Access Advisor,该用户必须具有ADMINISTER ANY SQL TUNING SET
特权。
假设条件
本教程假定以下内容:
- 您要创建一个名为的STS
MY_STS_WORKLOAD
。 - 您想将此STS用作从
sh
架构派生的工作负载的输入。 - 您使用
DBMS_SQLTUNE
而不是DBMS_SQLSET
。
要创建一个STS:
- 在SQL * Plus中,以user身份登录数据库
sh
。 - 设置SQL * Plus变量。
例如,输入以下命令:
SET SERVEROUTPUT ON; VARIABLE task_id NUMBER; VARIABLE task_name VARCHAR2(255); VARIABLE workload_name VARCHAR2(255);
复制 - 创建SQL调优集。
例如,为
workload_name
变量分配一个值并按如下方式创建STS:EXECUTE :workload_name := 'MY_STS_WORKLOAD'; EXECUTE DBMS_SQLTUNE.CREATE_SQLSET(:workload_name, 'test purpose');
复制
也可以看看:
- “ 关于SQL调优集 ”
- Oracle Database PL / SQL软件包和类型参考以了解
CREATE_SQLSET