runstats是由Thomas Kyte开发的脚本,该脚本能对做同一件事的两个不同方法进行比较,得出孰优孰劣的结果。

1.授权

SQL> grant select on v_$statname to livan;

Grant succeeded.

SQL> grant select on v_$mystat to livan;

Grant succeeded.

SQL> grant select on v_$timer to livan;

Grant succeeded.

SQL> grant select on v_$latch to livan;

Grant succeeded.

2.创建视图

SQL> conn livan/livan
Connected.
SQL> create or replace view stats
as select 'STAT...' || a.name name,b.value
from v$statname a, v$mystat b
where a.statistic# = b.statistic#
union all
select 'LATCH.' || name,gets
from v$latch
union all
select 'STAT...Elapsed Time',hsecs from v$timer; View created.

3.创建统计结果临时表

SQL> create global temporary table run_stats
( runid varchar2(),
name varchar2(),
value int)
on commit preserve rows; Table created.

4.创建runstats包

--runstats开始调用rs_start
--rs_middle在中间调用
--完成时调用rs_stop,并打印报告

--创建包头

SQL> create or replace package runstats_pkg
as
procedure rs_start;
procedure rs_middle;
procedure rs_stop(p_difference_threshold in number default );
end;
/ Package created.

--创建包体

[oracle@std ~]$ vi body_runstats_pkg.sql

    create or replace package  body runstats_pkg
as
g_start number;
g_run1 number;
g_run2 number; procedure rs_start
is
begin
delete from run_stats;
insert into run_stats
select 'before',stats.* from stats;
g_start := dbms_utility.get_cpu_time;
end; procedure rs_middle
is
begin
g_run1 := (dbms_utility.get_cpu_time-g_start);
insert into run_stats
select 'after 1',stats.* from stats;
g_start := dbms_utility.get_cpu_time;
end; procedure rs_stop(p_difference_threshold in number default )
is
begin
g_run2 := (dbms_utility.get_cpu_time-g_start); dbms_output.put_line
('Run1 ran in' || g_run1 ||'cpu hsecs');
dbms_output.put_line
('Run2 ran in' || g_run2 ||'cpu hsecs');
if (g_run2 <> ) then
dbms_output.put_line
('run 1 ran in' || round(g_run1/g_run2*,) ||'% of the time');
end if; dbms_output.put_line(chr()); insert into run_stats
select 'after 2',stats.* from stats; dbms_output.put_line
(rpad('Name',)||lpad('Run1',)||lpad('Run2',)||lpad('Diff',)); for x in
(select rpad(a.name,)||
to_char(b.value-a.value,'999,999,999')||
to_char(c.value-b.value,'999,999,999')||
to_char(((c.value-b.value)-(b.value-a.value)),'999,999,999') data
from run_stats a,run_stats b,run_stats c
where a.name = b.name
and b.name = c.name
and a.runid = 'before'
and b.runid = 'after 1'
and c.runid = 'after 2'
and (c.value-a.value)>
and abs((c.value-b.value)-(b.value-a.value))>p_difference_threshold
order by abs((c.value-b.value)-(b.value-a.value))
)loop
dbms_output.put_line(x.data);
end loop; dbms_output.put_line(chr());
dbms_output.put_line
('Run1 latches total versus runs -- difference and pct');
dbms_output.put_line
(lpad('Run1',)||lpad('Run2',)||lpad('Diff',)||lpad('Pct',)); for x in
(select
to_char(run1,'9,999,999')||
to_char(run2,'9,999,999')||
to_char(diff,'9,999,999')||
to_char(round(run1/decode(run2,,to_number(),run2*,)),'999.99')||'%' data
from
(select
sum(b.value-a.value) run1,
sum(c.value-b.value) run2,
sum((c.value-b.value)-(b.value-a.value)) diff
from run_stats a,run_stats b,run_stats c
where a.name = b.name
and b.name = c.name
and a.runid = 'before'
and b.runid = 'after 1'
and c.runid = 'after 2'
and a.name like 'LATCH%'
)
)loop
dbms_output.put_line(x.data);
end loop;
end;
end; "body_runstats_pkg.sql" [New] 95L, 2589C written SQL> @body_runstats_pkg.sql
/ Package body created.

5.测验

SQL> execute runstats_pkg.rs_start;

PL/SQL procedure successfully completed.

SQL> insert into t1 select * from dba_objects;

 rows created.

SQL> commit;

Commit complete.

SQL> execute runstats_pkg.rs_middle;

PL/SQL procedure successfully completed.

SQL> begin
for x in (select * from dba_objects)
loop
insert into t2 values x;
end loop;
commit;
end;
/ PL/SQL procedure successfully completed. SQL> execute runstats_pkg.rs_stop(); PL/SQL procedure successfully completed. SQL> set serveroutput on
SQL> execute runstats_pkg.rs_stop();
Run1 ran in60cpu hsecs
Run2 ran in425cpu hsecs
run ran in14.% of the time Name Run1 Run2 Diff
STAT...redo size ,, ,, ,,
STAT...redo size ,, ,, ,, Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
, ,, ,% PL/SQL procedure successfully completed.

show_space过程参考博主:

http://blog.csdn.net/huang_xw/article/details/7015349

部署Thomas Kyte 的 runstats 工具的更多相关文章

  1. 一键快速部署CodeBlocks的EGE图形库工具

    大一下学期,学完了c语言的基本内容, 也就开始开发项目了,此时一个图形界面就比较重要了,c语言中不提供图形界面,一般这些是用的其它开发的图形库,如 Easyx .ege等. 本文就提供 Codeblo ...

  2. 部署MySQL自动化运维工具inception+archer

    ***************************************************************************部署MySQL自动化运维工具inception+a ...

  3. 四、Ubuntu16.04下TestLink的部署【测试管理必备工具】

    TestLink部署和使用方法 TestLink是一个基于Web的开源测试和需求管理工具.该应用程序提供测试规范.测试计划和执行,报告,需求规范以及与知名的bug跟踪器协作. 特征 l 需求管理 - ...

  4. REDIS数据备份集群部署和双集群同步工具redis-migrate-tool

    REDIS 版本 < 4.0 笔者用的是 v=3.0.7 REDIS集群创建镜像:registry.cn-shenzhen.aliyuncs.com/cp_m/redis-trib:0.1.3 ...

  5. 部署安装snort--入侵检测工具

    1:部署安装snort yum -y install wget 2: 基本依赖环境 yum -y install gcc flex bison zlib zlib-devel libpcap libp ...

  6. Redis非关系型缓存数据库集群部署、参数、命令工具

    <关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...

  7. FW: Chef集中管理工具实践之 (1) 环境部署

    本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...

  8. 超级简便的容器化部署工具(使用 ASP.NET Core 演示)

    Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了.不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI.C ...

  9. Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL

    Kind 介绍 Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具.官方文档中也把Kind作为一种本地集群 ...

随机推荐

  1. ios app内嵌入http服务器

    1.采用CocoaHTTPServer https://github.com/robbiehanson/CocoaHTTPServer 2.采用MongooseDaemon https://githu ...

  2. Tern Sercer Tineout

  3. JDBC的操作总结

    JDBC  操作总结 JDBC是一组能够执行SQL语句的API JDBC的操作方式比较单一,简单的分为以下几个流程:  1.通过数据库厂商提供的JDB类库想DriverManager注册数据库驱动   ...

  4. 建表过程-列名&列类型&修改表小试题C

    #新增数据 INSERT INTO goods VALUES(10,'豆豆','男',85.2,'2016-12-14',5000.36,'2016-12-14 12:05:06','高') INSE ...

  5. js 函数

    函数:封装了某一块功能 四要素: 1.返回类型 2.函数名 3.参数列表4.函数体强类型语言 返回类型 函数名 首字母大写 参数列表string(字符串) Show (int a){ 函数体 }弱类型 ...

  6. 三、线程同步之Sysnchronized关键字

    线程同步 问题引入 观察一面一段小程序: public class Main { private static int amount = 0; public static void main(Stri ...

  7. Datazen地图Chart自定义数据

    此篇介绍如何将数据关联到Datazen地图图表.我们会将数据库中的数据映射到地图上. 首先查看下默认地图图表绑定的数据.以下是系统自带的美国地图数据,主要有两列,一列为地名,一列为度量数据.地图会根据 ...

  8. 收缩SQL Server数据库文件

    收缩整个数据库 DBCC SHRINKDATABASE (dbName) 收缩单个文件DBCC SHRINKFILE (FileName) 查找所有的文件名称USE dbNameEXEC sp_hel ...

  9. 优化一个奇葩表设计上的全表扫描SQL

    之前在一个比较繁忙的系统抓到的耗时长.消耗CPU多的一条SQL,如下:SELECT * FROM Z_VISU_DATA_ALARM_LOG TWHERE TO_DATE(T.T_TIMESTR, ' ...

  10. Quartz.Net简单使用

    Quartz.Net为开源的作业调度框架,使用方便,实现IJob接口,及相关配置,即可实现调度. 项目包安装: install-package Quartz install-package log4n ...