技术文章 - CS234097

使用 SQL Tuning Advisor 和 SQL Profiles 调整查询

已修改: 23-Jun-2022   


注意:本文已使用机器翻译软件翻译,以方便非英语客户阅读。但翻译内容可能包含语法错误或不准确之处。请注意, PTC对本文所含信息的翻译准确性及使用后果不承担任何责任。请在 此处 查看本文的英文原始版本以便参考。有关机器翻译的更多详情,请单击 此处
感谢您告诉我们。我们将尽快审阅此译文。

适用于

  • Windchill PDMLink 9.1 F000

说明

在 ORACLE 中使用 SQL Tuning Advisor (STA) 和 SQL Profiles 调整查询

注意:您需要为您的 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;
  • 为感兴趣的 sql_id 运行 SQL Tuning Advisor。
SQL> spool spool_file_name.log
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);

这意味着它为当前的 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