博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Access Advisor in Oracle Database 10g
阅读量:6877 次
发布时间:2019-06-26

本文共 4874 字,大约阅读时间需要 16 分钟。

The SQL Access Advisor makes suggestions about indexes and materialized views which might improve system performance. This article describes how to use the SQL Access Advisor in Oracle 10g.

Related articles.

Enterprise Manager

The SQL Access Advisor is accessible from Enterprise Manager. Specific reports can be produced by clicking on the "Advisor Central" link, then the "SQL Access Advisor" link. The resulting page allows you to create a workload and a SQL Access Advisor task. Once the task has completed you can view information about the findings and recommendations.

DBMS_ADVISOR

The DBMS_ADVISOR package can be used to create and execute any advisor tasks, including SQL Access Advisor tasks. The following example shows how it is used to create, execute and display a typical SQL Access Advisor script for the current workload.

DECLARE  l_taskname     VARCHAR2(30)   := 'test_sql_access_task';  l_task_desc    VARCHAR2(128)  := 'Test SQL Access Task';  l_wkld_name    VARCHAR2(30)   := 'test_work_load';  l_saved_rows   NUMBER         := 0;  l_failed_rows  NUMBER         := 0;  l_num_found    NUMBER;BEGIN  -- Create a SQL Access Advisor task.  DBMS_ADVISOR.create_task (    advisor_name => DBMS_ADVISOR.sqlaccess_advisor,    task_name    => l_taskname,    task_desc    => l_task_desc);      -- Reset the task.  DBMS_ADVISOR.reset_task(task_name => l_taskname);  -- Create a workload.  SELECT COUNT(*)  INTO   l_num_found  FROM   user_advisor_sqlw_sum  WHERE  workload_name = l_wkld_name;  IF l_num_found = 0 THEN    DBMS_ADVISOR.create_sqlwkld(workload_name => l_wkld_name);  END IF;  -- Link the workload to the task.  SELECT count(*)  INTO   l_num_found  FROM   user_advisor_sqla_wk_map  WHERE  task_name     = l_taskname  AND    workload_name = l_wkld_name;    IF l_num_found = 0 THEN    DBMS_ADVISOR.add_sqlwkld_ref(      task_name     => l_taskname,      workload_name => l_wkld_name);  END IF;    -- Set workload parameters.  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'ACTION_LIST', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'MODULE_LIST', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'SQL_LIMIT', DBMS_ADVISOR.ADVISOR_UNLIMITED);  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'ORDER_LIST', 'PRIORITY,OPTIMIZER_COST');  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'USERNAME_LIST', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_sqlwkld_parameter(l_wkld_name, 'VALID_TABLE_LIST', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.import_sqlwkld_sqlcache(l_wkld_name, 'REPLACE', 2, l_saved_rows, l_failed_rows);  -- Set task parameters.  DBMS_ADVISOR.set_task_parameter(l_taskname, '_MARK_IMPLEMENTATION', 'FALSE');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'EXECUTION_TYPE', 'INDEX_ONLY');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'MODE', 'COMPREHENSIVE');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'STORAGE_CHANGE', DBMS_ADVISOR.ADVISOR_UNLIMITED);  DBMS_ADVISOR.set_task_parameter(l_taskname, 'DML_VOLATILITY', 'TRUE');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'ORDER_LIST', 'PRIORITY,OPTIMIZER_COST');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'WORKLOAD_SCOPE', 'PARTIAL');  DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_INDEX_TABLESPACE', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_INDEX_OWNER', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_MVIEW_TABLESPACE', DBMS_ADVISOR.ADVISOR_UNUSED);  DBMS_ADVISOR.set_task_parameter(l_taskname, 'DEF_MVIEW_OWNER', DBMS_ADVISOR.ADVISOR_UNUSED);  -- Execute the task.  DBMS_ADVISOR.execute_task(task_name => l_taskname);END;/-- Display the resulting script.SET LONG 100000SET PAGESIZE 50000SELECT DBMS_ADVISOR.get_task_script('test_sql_access_task') AS scriptFROM   dual;SET PAGESIZE 24

The value for the SET LONG command should be adjusted to allow the whole script to be displayed.

Quick Tune

If you just want to tune an individual statement you can use the QUICK_TUNE procedure as follows.

BEGIN  DBMS_ADVISOR.quick_tune(    advisor_name => DBMS_ADVISOR.SQLACCESS_ADVISOR,     task_name    => 'emp_quick_tune',    attr1        => 'SELECT e.* FROM emp e WHERE UPPER(e.ename) = ''SMITH''');END;/

Any recommendations can then be displayed using the previous query with the correct task name specified.

Related Views

The following views can be used to display the SQL Access Advisor output without using Enterprise Manager or the get_task_script function:

  • DBA_ADVISOR_TASKS - Basic information about existing tasks.
  • DBA_ADVISOR_LOG - Status information about existing tasks.
  • DBA_ADVISOR_FINDINGS - Findings identified for an existing task.
  • DBA_ADVISOR_RECOMMENDATIONS - Recommendations for the problems identified by an existing task.

For more information see:

Hope this helps. Regards Tim...

转载于:https://www.cnblogs.com/zfox2017/p/7567814.html

你可能感兴趣的文章
qcom 跨平台的串口调试工具 PKGBUILD
查看>>
Delphi 时间格式化,动态显示时间,显示最新时间
查看>>
在JAVA中将NEW一分为2,分步进行[反射机制产生类]
查看>>
Java多态性的两个特殊情况
查看>>
我的友情链接
查看>>
怎么改变Win7登陆背景图片
查看>>
虚拟带库和物理带库比较
查看>>
AD委派加域权限
查看>>
在Delphi 7中使用加密的SQLite
查看>>
wordpress 无用的RSS Feed Cache
查看>>
Linux Vi编辑器的基本使用方法
查看>>
HTTP头域列表与解释 之 response篇
查看>>
一切属他,则名为苦;一切由己,自在安乐。
查看>>
velocity 之坑:不同枚举类(enum)有相同的静态(static)方法,无法访问第二个枚举类...
查看>>
图的遍历方法(深度优先和广度优先算法)
查看>>
鸟巢-一种全新的Native APP开发模式,这篇文章为您解读
查看>>
shell批量查询IP
查看>>
快速生成移动设备应用图标的在线工具 - makeappicon
查看>>
学习linux决心书
查看>>
SVN服务的搭建
查看>>