设为首页 收藏本站
查看: 1442|回复: 0

[经验分享] OCP读书笔记(15)

[复制链接]

尚未签到

发表于 2015-6-17 04:27:03 | 显示全部楼层 |阅读模式
  SQL Tuning Advisor(STA): 使用oracle提供的程序包进行sql优化



SQL> conn scott/tiger
SQL> create table manual_sta(id varchar2(10), name varchar2(128));
SQL> insert into manual_sta select object_id, object_name from dba_objects;
SQL> commit;
  在id列上创建一个索引,并收集统计信息。



SQL> create index idx_manual_sta on manual_sta(id);
SQL> exec dbms_stats.gather_table_stats(user,'manual_sta',cascade=>true);
  调用STA对SQL语句进行调优:



SQL> declare
l_task_id varchar2(20);
l_sql varchar2(2000);
begin
l_sql := 'select * from manual_sta where id=2000';
l_task_id := dbms_sqltune.create_tuning_task(
  sql_text=>l_sql,
  user_name=>'SCOTT',
  scope=>'COMPREHENSIVE',
  time_limit=>30,
  task_name=>'MANUAL_STA'
);
end;
/
  执行sql调优任务。



SQL> begin
  dbms_sqltune.execute_tuning_task('MANUAL_STA');
end;
/
  显示调优结果



SQL> set serveroutput on size 999999;
SQL> set long 99999999;
SQL> select dbms_sqltune.report_tuning_task('MANUAL_STA') from dual;
  显示结果中会建议建一个函数索引。
  删除任务:



SQL> exec dbms_sqltune.drop_tuning_task('MANUAL_STA');
  物化视图



SQL> conn /as sysdba
SQL> grant create materialized view to scott;
SQL> conn scott/tiger
SQL> create table e as select * from emp;
SQL> create table d as select * from dept;
SQL> drop materialized view log on e;
SQL> drop materialized view log on d;
SQL> drop materialized view mv_e_d;
SQL> create materialized view log on e with rowid(empno, ename, job, mgr, hiredate, sal, comm, deptno) including new values;
SQL> create materialized view log on d with rowid(deptno, dname, loc) including new values;
SQL> create materialized view mv_e_d build immediate refresh complete on commit as select a.dname, sum(b.sal) total_sal, count(*) c_sal from d a, e b where a.deptno=b.deptno group by a.dname;

  SQL Acess Advisor(SAA)
  1. 创造数据库负载
  vi /u01/app/oracle/temptest/1.sql



SELECT /* QueryDW 1*/
t.calendar_month_desc,sum(s.amount_sold) AS dollars
FROM sh.sales s
, sh.times t
WHERE s.time_id = t.time_id
AND s.time_id between TO_DATE('01-JAN-2000', 'DD-MON-YYYY')
AND TO_DATE('01-JUL-2000', 'DD-MON-YYYY')
GROUP BY t.calendar_month_desc;
  vi /u01/app/oracle/temptest/2.sql



SELECT /* QueryDW 2 */
ch.channel_class, c.cust_city, t.calendar_quarter_desc,
SUM(s.amount_sold) sales_amount
FROM sh.sales s, sh.times t, sh.customers c, sh.channels ch
WHERE s.time_id = t.time_id
AND s.cust_id = c.cust_id
AND s.channel_id = ch.channel_id
AND c.cust_state_province = 'CA'
AND ch.channel_desc in ('Internet','Catalog')
AND t.calendar_quarter_desc IN ('1999-01','1999-02')
GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;
  vi /u01/app/oracle/temptest/3.sql



SELECT /* QueryDW 3 */
ch.channel_class, c.cust_city, t.calendar_quarter_desc,
SUM(s.amount_sold) sales_amount
FROM sh.sales s, sh.times t, sh.customers c, sh.channels ch
WHERE s.time_id = t.time_id
AND s.cust_id = c.cust_id
AND s.channel_id = ch.channel_id
AND c.cust_state_province = 'CA'
AND ch.channel_desc in ('Internet','Catalog')
AND t.calendar_quarter_desc IN ('1999-03','1999-04')
GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;
  vi /u01/app/oracle/temptest/4.sql



SELECT /* QueryDW 4 */ c.country_id, c.cust_city, c.cust_last_name
FROM sh.customers c
WHERE c.country_id in (52790, 52798)
ORDER BY c.country_id, c.cust_city, c.cust_last_name;
  执行以上4个脚本:



SQL> conn sh/sh
@/u01/app/oracle/temptest/1.sql
@/u01/app/oracle/temptest/2.sql
@/u01/app/oracle/temptest/3.sql
@/u01/app/oracle/temptest/4.sql
  2. 创建sql调优集:
  vi /u01/app/oracle/temptest/sts.sql



connect / as sysdba
set echo on
select sql_text from v$sql where sql_text like '%QueryDW%';
BEGIN
  dbms_sqltune.drop_sqlset('MY_STS_WORKLOAD');
END;
/
DECLARE
  sqlsetname VARCHAR2(30);
  sqlsetcur dbms_sqltune.sqlset_cursor;
BEGIN
  sqlsetname := 'MY_STS_WORKLOAD';
  dbms_sqltune.create_sqlset(sqlsetname, 'Access Advisor data');
  OPEN sqlsetcur FOR
  SELECT VALUE(P)
  FROM TABLE(
    dbms_sqltune.select_cursor_cache(
    'sql_text like ''SELECT /* QueryDW%''',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    null)
  ) P;
dbms_sqltune.load_sqlset(sqlsetname, sqlsetcur);
END;
/
  执行以上的脚本:
  @/u01/app/oracle/temptest/sts.sql
  此脚本创建了一个sql调优集:MY_STS_WORKLOAD,此集中包含了第一步执行的sql语句
  3. 进入OEM查看调用SAA来对调优集:MY_STS_WORKLOAD中的sql语句进行调优
  4. 清除实验环境:



SQL> connect / as sysdba
SQL> exec dbms_sqltune.drop_sqlset('MY_STS_WORKLOAD');
SQL> drop materialized view log on sh.customers;
SQL> drop materialized view log on sh.channels;
SQL> drop materialized view log on sh.times;
SQL> drop materialized view log on sh.sales;
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-77982-1-1.html 上篇帖子: 了解ORACLE培训OCA-OCP-OCM课程表 下篇帖子: OCP读书笔记(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表