技术文章 - CS234097
使用 SQL Tuning Advisor 和 SQL Profiles 调整查询
已修改: 23-Jun-2022
适用于
- Windchill PDMLink 9.1 F000
说明
在 ORACLE 中使用 SQL Tuning Advisor (STA) 和 SQL Profiles 调整查询
注意:您需要为您的 Oracle 系统启用诊断和调整包。
这接受需要分析的 awr 快照信息和 sql_id。
浏览假脱机文件,你会发现一个“发现部分”。
在此之下,您可能会看到 STA 给出的建议。一个典型的推荐可以是这样的。
这意味着它为当前的 sql 找到了比正在使用的更好的执行计划。此执行计划以 SQL 配置文件的形式表示。
执行上述操作后,建议的配置文件将在 DBA_SQL_PROFILES 表中的 DEFAULT 类别下注册,并带有系统生成的名称,例如“SYS_SQLPROF_014a343154084000”(一些随机名称!)。
这将创建一个表 SQL_STG_TAB,它将能够保存所需的 sql 配置文件,该表的结构与 DBA_SQL_PROFILES 表的结构完全相同。
姓名
——————————
SYS_SQLPROF_0815
SQL> exec DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name => 'SQL_STG_TAB',profile_name=>'SYS_SQLPROF_0815');
注意:您需要为您的 Oracle 系统启用诊断和调整包。
- 以 DBA 用户身份登录:
$ sqlplus "/ as sysdba"
- 运行此 sql 以查看正在执行的 sql。
col程序格式a20
设置线 180
col sql_text 格式 a50
选择 b.sid,b.status,b.last_call_et,b.program,c.sql_id,c.sql_text from v$session b,v$sqlarea c where b.sql_id=c.sql_id;
设置线 180
col sql_text 格式 a50
选择 b.sid,b.status,b.last_call_et,b.program,c.sql_id,c.sql_text from v$session b,v$sqlarea c where b.sql_id=c.sql_id;
- 为感兴趣的 sql_id 运行 SQL Tuning Advisor。
SQL> spool spool_file_name.log
SQL> @?/rdbms/admin/sqltrpt
SQL> 假脱机
SQL> @?/rdbms/admin/sqltrpt
SQL> 假脱机
这接受需要分析的 awr 快照信息和 sql_id。
浏览假脱机文件,你会发现一个“发现部分”。
在此之下,您可能会看到 STA 给出的建议。一个典型的推荐可以是这样的。
1- SQL 配置文件查找(请参阅下面的解释计划部分)
————————————————————
为该语句找到了一个可能更好的执行计划。
推荐(估计收益:99.91%)
———————————————
– 考虑接受推荐的 SQL 配置文件。
执行 dbms_sqltune.accept_sql_profile(task_name => 'TASK_4711',replace => TRUE);
为该语句找到了一个可能更好的执行计划。
推荐(估计收益:99.91%)
———————————————
– 考虑接受推荐的 SQL 配置文件。
执行 dbms_sqltune.accept_sql_profile(task_name => 'TASK_4711',replace => TRUE);
这意味着它为当前的 sql 找到了比正在使用的更好的执行计划。此执行计划以 SQL 配置文件的形式表示。
- 要使当前 sql 的新配置文件默认,请按照 STA 的建议执行 accept_qsl_profile 过程:
SQL> 执行 dbms_sqltune.accept_sql_profile(task_name => 'TASK_4711',replace => TRUE);
执行上述操作后,建议的配置文件将在 DBA_SQL_PROFILES 表中的 DEFAULT 类别下注册,并带有系统生成的名称,例如“SYS_SQLPROF_014a343154084000”(一些随机名称!)。
- 如果您希望使用自定义名称注册配置文件,请使用:
SQL> 执行 dbms_sqltune.accept_sql_profile(task_name => 'TASK_4711',name => 'CUSTOM_PROF_MyQuery');
- 我们可以将这些配置文件从一个数据库移动到另一个数据库,如下所示。这称为打包和解包 sql 配置文件。首先创建临时表,它将保存要移动的 sql 配置文件。
SQL> exec DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF (table_name=>'SQL_STG_TAB',schema_name=>'SYS');
这将创建一个表 SQL_STG_TAB,它将能够保存所需的 sql 配置文件,该表的结构与 DBA_SQL_PROFILES 表的结构完全相同。
- 要将自定义配置文件打包到阶段表:
SQL> EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name => 'SQL_STG_TAB',profile_name=>'CUSTOM_PROF_MyQuery');
- 要将 DEFAULT 类别下的所有配置文件打包到阶段表,
SQL> EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name => 'SQL_STG_TAB');
- 如果您想打包特定的 sql 配置文件并且您不知道配置文件的名称,您可以查询 dba_sql_profiles 选项卡。
SQL> select name from DBA_SQL_PROFILES where SQL_TEXT like '%SELECT%EMPLOYEE%NAME%';
姓名
——————————
SYS_SQLPROF_0815
SQL> exec DBMS_SQLTUNE.PACK_STGTAB_SQLPROF (staging_table_name => 'SQL_STG_TAB',profile_name=>'SYS_SQLPROF_0815');
- 使用 exp 导出阶段选项卡。
$ exp "/ as sysdba" 表=SQL_STG_TAB 文件=SQL_STG_TAB.dmp
- 使用 imp 导入阶段选项卡
$ imp "/ as sysdba" 文件=SQL_STG_TAB.dmp full=y
- 在目标数据库解压配置文件,
SQL> EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF(replace => TRUE,staging_table_name => 'SQL_STG_TAB');
这是文章 234097 的 PDF 版本,可能已过期。最新版本 CS234097