实战:ORACLE SQL Performance Analyzer

通过 SPA,您能够依据各种更改类型(如初始化參数更改、优化器统计刷新和数据库升级)播放特定的
SQL 或整个 SQL
负载,然后生成比較报告,帮助您评估它们的影响.

在 Oracle Database 11g 之前的版本号中,我必须捕获全部 SQL 语句,通过跟踪执行这些语句,
然后得到运行计划 —
这是一项极其耗时又极易出错的任务。新版本号中,我们不须要再那样做了,
我改用很easy而有效的 SQL Performance Analyzer。

---使用场景

1.数据库升级
2.实施优化建议
3.更改方案
4.收集统计信息
5.更改数据库參数
6.更改操作系统和硬件

create tablespace test
datafile
‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\test01.DBF‘
size 5000m
autoextend
on
next 100m maxsize unlimited
extent management local autoallocate

segment   space management auto;

create table t1
(
sid int not null ,
sname varchar2(10)
)

tablespace test;

-2.-循环导入数据
declare
       
maxrecords constant int:=1000000;
       
i int :=1;
    begin

        for i in 1..maxrecords loop

          insert into t1
values(i,‘ocpyang‘);
        end loop;

    dbms_output.put_line(‘ 成功录入数据! ‘);
   
commit;
    end;
/

update t1 set sname=‘苏州‘ where sid=500001;

update t1 set sname=‘南京‘ where sid=600001;

---3.收集统计信息

exec dbms_stats.gather_table_stats(USER,‘T1‘,CASCADE=>TRUE)

alter system flush shared_pool;

---4.运行查询

select count(*) from t1 where sid<=100;

select count(*) from t1 where sid<=500;

select count(*) from t1 where sid>50000;

---5.新建STS

BEGIN
  DBMS_SQLTUNE.DROP_SQLSET(
    sqlset_name
=> ‘OCPYANG_STS‘
    );
END;
/

BEGIN
  DBMS_SQLTUNE.CREATE_SQLSET(
    sqlset_name
=> ‘OCPYANG_STS‘,
    sqlset_owner => ‘SYS‘,

    description  => ‘ocpyangtest‘);
END;
/

---6.载入sql优化集

set serveroutput on
DECLARE
cur01 dbms_sqltune.sqlset_cursor;
BEGIN

open cur01 for select value(a) from
table(dbms_sqltune.select_cursor_cache
(
basic_filter => ‘sql_text like
‘‘%T1%‘‘ and parsing_schema_name =‘‘SYS‘‘‘,
attribute_list => ‘ALL‘

)
) a;
dbms_sqltune.load_sqlset(
sqlset_name => ‘OCPYANG_STS‘,

populate_cursor => cur01);
close cur01;
END;
/

/*********有两个參数值得特别说明:

1)SELECT_CURSOR_CACHE的第一个參数是basic_filter ,它能够取的值有:

sql_id                  
VARCHAR(13),
  force_matching_signature NUMBER,
 
sql_text                
CLOB,
 
object_list             
sql_objects,
 
bind_data               
RAW(2000),
  parsing_schema_name     
VARCHAR2(30),
 
module                  
VARCHAR2(48),
 
action                  
VARCHAR2(32),
 
elapsed_time            
NUMBER,
 
cpu_time                
NUMBER,
 
buffer_gets             
NUMBER,
 
disk_reads              
NUMBER,
 
direct_writes           
NUMBER,
 
rows_processed          
NUMBER,
 
fetches                 
NUMBER,
 
executions              
NUMBER,
  end_of_fetch_count      
NUMBER,
 
optimizer_cost          
NUMBER,
 
optimizer_env           
RAW(1000),
 
priority                
NUMBER,
 
command_type            
NUMBER,
 
first_load_time         
VARCHAR2(19),
 
stat_period             
NUMBER,
  active_stat_period      
NUMBER,
 
other                   
CLOB,
 
plan_hash_value         
NUMBER,
 
sql_plan                
sql_plan_table_type,
 
bind_list               
sql_binds

2)SELECT_CURSOR_CACHE的最后一个參数是attribute_list

BASIC (default) -all attributes (such as execution statistics and binds) are
returned except the plans The execution context is always part of the
result.

TYPICAL - BASIC + SQL plan (without row source statistics) and without object
reference list

ALL - return all attributes

Comma separated list of attribute names this allows to return only a subset
of SQL attributes: EXECUTION_STATISTICS, BIND_LIST, OBJECT_LIST,
SQL_PLAN,SQL_PLAN_STATISTICS: similar to SQL_PLAN + row source statistics

*********/

---7.查询sql优化集

select sql_id,sql_text from dba_sqlset_statements
where
sqlset_name=‘OCPYANG_STS‘ and sql_text like ‘% from t1%‘;

---8.新建SPA

var v_task varchar2(64);
begin

:v_task:=dbms_sqlpa.create_analysis_task(
sqlset_name => ‘OCPYANG_STS‘,

task_name => ‘SPA01‘
);
end;
/

/**********语法

Syntax

SQL text format. This form of the function is called to prepare the analysis
of a single statement given its text.

DBMS_SQLPA.CREATE_ANALYSIS_TASK(
 
sql_text         IN CLOB,
 
bind_list        IN sql_binds := NULL,

  parsing_schema   IN VARCHAR2  := NULL,
 
task_name        IN VARCHAR2  :=
NULL,
  description      IN VARCHAR2  :=
NULL)
RETURN VARCHAR2;
SQL ID format. This form of the function is called
to prepare the analysis of a single statement from the cursor cache given its
identifier.

DBMS_SQLPA.CREATE_ANALYSIS_TASK(
 
sql_id           IN
VARCHAR2,
  plan_hash_value  IN NUMBER    :=
NULL,
  task_name        IN
VARCHAR2  := NULL,
  description      IN
VARCHAR2  := NULL)
RETURN VARCHAR2;
Workload Repository format. This
form of the function is called to prepare the analysis of a single statement
from the workload repository given a range of snapshot identifiers.

DBMS_SQLPA.CREATE_ANALYSIS_TASK(
 
begin_snap       IN NUMBER,
 
end_snap         IN NUMBER,
 
sql_id           IN
VARCHAR2,
  plan_hash_value  IN NUMBER    :=
NULL,
  task_name        IN
VARCHAR2  := NULL,
  description      IN
VARCHAR2  := NULL)
RETURN VARCHAR2;

SQLSET format. This form of the function is called to prepare the
analysis of a SQL tuning set.

DBMS_SQLPA.CREATE_ANALYSIS_TASK(
 
sqlset_name       IN VARCHAR2,
 
basic_filter      IN VARCHAR2 :=  NULL,
 
order_by          IN VARCHAR2
:=  NULL,
 
top_sql           IN VARCHAR2
:=  NULL,
 
task_name         IN VARCHAR2 := 
NULL,
  description       IN VARCHAR2
:=  NULL
  sqlset_owner      IN VARCHAR2
:=  NULL)
RETURN VARCHAR2;

**********/

---9.运行SPA

begin
dbms_sqlpa.execute_analysis_task
(
task_name =>
‘SPA01‘,
execution_type => ‘test execute‘,
execution_name =>
‘before_change‘
);
end;
/

/*********语法

DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
  
task_name         IN VARCHAR2,

   execution_type    IN
VARCHAR2              
:= ‘test execute‘,
   execution_name    IN
VARCHAR2              
:= NULL,
   execution_params  IN
dbms_advisor.argList   := NULL,
  
execution_desc    IN
VARCHAR2              
:= NULL)
  RETURN VARCHAR2;

DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(
  
task_name         IN VARCHAR2,

   execution_type    IN
VARCHAR2              
:= ‘test execute‘,
   execution_name    IN
VARCHAR2              
:= NULL,
   execution_params  IN
dbms_advisor.argList   := NULL,
  
execution_desc    IN
VARCHAR2              
:= NULL);

*********/

---10.改变

create index index_01 on t1(sid,sname)
tablespace test;

exec dbms_stats.gather_table_stats(USER,‘T1‘,CASCADE=>TRUE)

---11.改变后运行

begin
dbms_sqlpa.execute_analysis_task
(
task_name =>
‘SPA01‘,
execution_type => ‘test execute‘,
execution_name =>
‘after_change‘
);
end;
/

col TASK_NAME format a30
col EXECUTION_NAME for a30
select
execution_name,
status,
execution_end
from DBA_ADVISOR_EXECUTIONS

where task_name=‘SPA01‘
order by execution_end
/

EXECUTION_NAME                
STATUS      EXECUTION_END

------------------------------ ----------- -------------------

before_change                 
COMPLETED   2014-05-28 15:43:58

after_change                  
COMPLETED   2014-05-28 15:44:58

---12.运行任务比較

begin
dbms_sqlpa.EXECUTE_ANALYSIS_TASK(

task_name        => ‘SPA01‘,

execution_type   => ‘compare performance‘,
execution_params
=> dbms_advisor.arglist(
‘execution_name1‘,
‘before_change‘,

‘execution_name2‘,
‘after_change‘));
end;
/

---13.生产报告

set serveroutput on size 999999
set long 100000000
set pagesize 0

set linesize 200
set longchunksize 200
set trimspool on
spool
e:\report.txt

select DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA01‘) from dual;

spool off;

实战:ORACLE SQL Performance Analyzer,布布扣,bubuko.com

时间: 2024-10-07 22:37:44

实战:ORACLE SQL Performance Analyzer的相关文章

Oracle SQL tuning 步骤

Oracle SQL tuning 步骤 SQL是的全称是Structured Query Language(结构化查询语言).SQL是一个在80年代中期被使用的工业标准数据库查询语言.不要把SQL语言与商业化产品如Microsoft SQL server或开源产品MySQL相混淆.所有的使用SQL缩略词的这些都是SQL标准的一部分. 一.SQL tuning之前的调整    下面这个粗略的方法能够节省数千小时乏味的SQL tuning,因为一旦调整它将影响数以百计的SQL查询.记住,你必须优先

ORACLE SQL TUNING ADVISOR 使用方法

sql tunning advisor 使用的主要步骤: 1 建立tunning task 2 执行task 3 显示tunning 结果 4 根据建议来运行相应的调优方法  下面来按照这个顺序来实施一遍:    1  建立测试表以及索引 SQL> CREATE TABLE test_sql_advisor AS SELECT OWNER,OBJECT_NAME,OBJECT_ID FROM DBA_OBJECTS; Table created SQL> select count(*) fro

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第1/5套:SQL语言之基础入门及环境准备.主要学习Oracle数据库SQL语言基础介绍.PL/SQL语言介绍.数据库SQL对象与数据类型介绍.SQL语言实战环境准备等. Oracle SQL语言之基础及环境准备,课程内容详细如下: Oracle数据库SQL语言基础介绍Oracle数据

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27

Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培训27 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第2/5套:Oracle SQL语言DDL和对象管理.主要学习Oracle数据库模式对象和表中可用的数据类型,表/临时表的创建与使用,索引/约束的创建与管理,视图/同义词/序列的创建和使用,触发器/存储过程/包的创建和使用. Oracle SQL语言DDL和对象管理,课程内容详细如下

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28

Oracle SQL语言DML语句与事务_超越OCP精通Oracle视频教程培训28 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第3/5套:Oracle SQL语言DML语句与事务.主要学习Oracle数据库SQL语句INSERT命令,学习使用UPDATE命令,学习使用DELETE命令,学习创建PL/SQL对象,事务概念与控制,锁的检测和锁争用,了解撤销数据. Oracle SQL语言DML语句与事务管理,课

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29

Oracle SQL语言之查询语句_超越OCP精通Oracle视频教程培训29 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第4/5套:Oracle SQL语言之查询语句.主要学习Oracle数据库SQL查询限制排序.Oracle SQL联接查询.Oracle SQL子查询等. 视频学习地址: http://edu.51cto.com/course/course_id-8047.html Oracle SQL语

Oracle SQL语言之常用函数_超越OCP精通Oracle视频教程培训30

Oracle SQL语言之常用函数_超越OCP精通Oracle视频教程培训30 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第5/5套:Oracle SQL语言之常用函数.主要学习Oracle数据库SQL聚合函数,分组函数,字符函数,转换函数,日期字符数字转换,日期函数,集合函数,分析函数等. Oracle SQL语言之常用函数,课程内容详细如下: 聚合函数-数据统计 分组函数-使用group by与havin

oracle sql资源消耗相关视图

一.常用视图说明 Oracle sql语句资源消耗监控,最常用的系统视图有: v$sql v$sqlarea v$sqltext v$session v$sql和v$sqlarea基本相同,记录了共享SQL区(share pool)中SQL统计信息,如内存消耗.IO(物理磁盘读和逻辑内存读).排序操作.哈希ID等数据.不同之处在于v$sql为每一条SQL保留一个条目,而v$sqlarea中根据sql_text(需要注意,该处存储的为当前SQL指针的前1000个字符,也就是说这里记录的SQL可能是

Oracle SQL explain/execution Plan

From http://blog.csdn.net/wujiandao/article/details/6621073 1. Four ways to get execution plan(anytime you want, for specified sql) ? Execute the SQL statement EXPLAIN PLAN, and then query the table where the output was written. ? Query a dynamic per