部署Thomas Kyte 的 runstats 工具
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 工具的更多相关文章
- 一键快速部署CodeBlocks的EGE图形库工具
大一下学期,学完了c语言的基本内容, 也就开始开发项目了,此时一个图形界面就比较重要了,c语言中不提供图形界面,一般这些是用的其它开发的图形库,如 Easyx .ege等. 本文就提供 Codeblo ...
- 部署MySQL自动化运维工具inception+archer
***************************************************************************部署MySQL自动化运维工具inception+a ...
- 四、Ubuntu16.04下TestLink的部署【测试管理必备工具】
TestLink部署和使用方法 TestLink是一个基于Web的开源测试和需求管理工具.该应用程序提供测试规范.测试计划和执行,报告,需求规范以及与知名的bug跟踪器协作. 特征 l 需求管理 - ...
- REDIS数据备份集群部署和双集群同步工具redis-migrate-tool
REDIS 版本 < 4.0 笔者用的是 v=3.0.7 REDIS集群创建镜像:registry.cn-shenzhen.aliyuncs.com/cp_m/redis-trib:0.1.3 ...
- 部署安装snort--入侵检测工具
1:部署安装snort yum -y install wget 2: 基本依赖环境 yum -y install gcc flex bison zlib zlib-devel libpcap libp ...
- Redis非关系型缓存数据库集群部署、参数、命令工具
<关系型数据库与非关系型数据库> 关系数据库:mysql.oracle.DB2.SQL Server非关系数据库:Redis(缓存数据库).MongodDB(处理海量数据).Memcach ...
- FW: Chef集中管理工具实践之 (1) 环境部署
本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...
- 超级简便的容器化部署工具(使用 ASP.NET Core 演示)
Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了.不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI.C ...
- Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL
Kind 介绍 Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具.官方文档中也把Kind作为一种本地集群 ...
随机推荐
- java 部分隐藏字段
项目中,很多时候要对数据作隐私保护,隐藏一些数据的关键信息,比如身份证,隐藏其中的出生年月 //利用正则表达式匹配替换字符串 String email = "young452wer@gami ...
- javascript中的对象
除了字符串,数字,布尔值(true,false),null,undefined,js中的值都是对象. 操作一个对象 var o = {name: 'man', value: 99} o.name = ...
- tp框架之session
系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成,该函数可以完成Session的设置.获取.删除和管理操作. session初始化设置 如果session ...
- Learn ES2015
折腾了大半年的项目,用的angular折腾快疯了. 总算有个小结了.正好闲下来为新的项目做准备,学点新的玩意玩玩,以往ES6都没用过,感觉被大部队甩好远了,抓紧跟上大部队的脚步... 1.利用let和 ...
- 手机开发中的AP与BP的概念
转自:http://blog.csdn.net/macong01/article/details/15504611 手机的AP和BP: AP:ApplicationProcessor,即应用芯片 BP ...
- *** $CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数
使用场景: 注意 get_instance 的使用场景,这个方法并不是用在控制器中的.而是用在控制器外面,比如类库中,想操作 CI 超级对象的时候,超级对象实际上就是当前控制器的实例. 你随便下个CI ...
- C#远程时间同步助手软件设计
C#远程时间同步助手软件设计 本程序才C#语言开发,实现远程时间同步功能,可以将本地时间每隔一段时间与时间服务器时间进行同步!不足之处还望见谅! 软件开发环境:Visual Studio 2010 软 ...
- 【leetcode】Intersection of Two Linked Lists
题目简述: Write a program to find the node at which the intersection of two singly linked lists begins. ...
- js随笔
在js中,一个[]认为是数组:{}认为是Json对象:
- 车销宝无线开单PDA 一款互联网+POS神器 无缝与电脑数据同步 无线POS开单解决方案
1.无线POS开单解决方案是基于后台系统开发的一套系统,它实现了采购入库退货.销售出库退货.盘点调拨等功能. 2.系统通过(WIFI.GPRS.GSM.蓝牙)实时后台库存.客户.商品.价格跟踪等信息, ...