OCP读书笔记(15) - 管理SQL性能调优
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;
OCP读书笔记(15) - 管理SQL性能调优的更多相关文章
- OCP读书笔记(14) - 管理数据库性能
搜集统计信息 1. dbms_stats gather_schema_stats 1)option:有四个选项: a.gather empty:只分析目前还没有搜集过统计信息的表 SQL> co ...
- JVM | 第1部分:自动内存管理与性能调优《深入理解 Java 虚拟机》
目录 前言 1. 自动内存管理 1.1 JVM运行时数据区 1.2 Java 内存结构 1.3 HotSpot 虚拟机创建对象 1.4 HotSpot 虚拟机的对象内存布局 1.5 访问对象 2. 垃 ...
- spark2.+ sql 性能调优
1.在内存中缓存数据 性能调优主要是将数据放入内存中操作,spark缓存注册表的方法 版本 缓存 释放缓存 spark2.+ spark.catalog.cacheTable("tableN ...
- OCP读书笔记(13) - 管理内存
SGA 1. 什么是LRULRU表示Least Recently Used,也就是指最近最少使用的buffer header链表LRU链表串联起来的buffer header都指向可用数据块 2. 什 ...
- SQL性能调优基础教材
一.数据库体系结构 1. Oracle数据库和实例 数据库:物理操作系统文件或磁盘的集合. 实例:一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程 ...
- mysql之sql性能调优
sql调优大致分为两步:1 如何定位慢查询 2 如何优化sql语句. 一:定位慢查询 -- 显示到mysql数据库的连接数 -- show status like 'connections'; - ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- OCP读书笔记(16) - 管理资源
使用者组 创建资源用户组OLTP_GRP,将用户HR,OE加入此组: BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_m ...
- SQL 性能调优日常积累
我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左 ...
随机推荐
- excel通过转成xml格式模板,下载成excel文件
源代码: report ztest_down_excel. data: begin of i_file occurs , val() type c, end of i_file. data begin ...
- hdu1151Air Raid
Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
原文:WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 在<基于IIS的WCF服务寄宿(Hosting)实现揭秘>中,我们谈到在采用基于IIS(或者 ...
- hdu2492 Ping pong
hdu2492 Ping pong 题意:一群乒乓爱好者居住在一条直线上,如果两个人想打比赛需要一个裁判,裁判的 位置 必须在两者之间 ,裁判的能力也必须不大于 参赛者最大的,不小于参赛者最小的 白皮 ...
- SQL窗体函數一例
需求: MSSQL,列出服務實例中全部數據庫的例如以下信息: 數據庫ID.數據庫名.創建日期.數據文件類型.數據文件大小.數據庫總大小.文件所在路徑. 寫法(後面的百分比為所花時間占比): -- 连接 ...
- [Cocos2d-x开发问题-3] cocos2dx动画Animation介绍
Cocos2d-x为了减少开发难度,对于动画的实现採用的帧动画的方案.这也就是说Cocos2d-x中的动画是帧动画. 帧动画的原理相信大家都不陌生,就是多张图片循环播放以实现动画的效果. 一个简单的动 ...
- hdu1370-Biorhythms
http://acm.hdu.edu.cn/showproblem.php?pid=1370 中国剩余定理 已知(n+d)%23=a; (n+d)%28=b; (n+c)%33=i ...
- linux shell种类
1.shell 种类 目前我们的 Linux (以 CentOS 5.x 为例) 有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 ...
- 同一个form里,不管哪个 submit 都是直接提交form表单里的内容
要达到你的目的,就不能用类型为 submit 的按钮,要用 button,然后加onclick 方法来自定义预处理参数,然后再调用 submit 方法提交表单,比如 <script type=& ...
- Apple iOS MDM开发流程
一年前曾参与过中石油的一个移动平台项目,实现了通过MDM对iOS设备进行管理.由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享,并没有对具体实现的文档进行公开,所以这方面的资料非常少. ...