部署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作为一种本地集群 ...
随机推荐
- javascript export excel
<input type="button" onclick="tableToExcel('tablename', 'name')" value=" ...
- Python 小爬虫流程总结
接触Python3一个月了,在此分享一下知识点,也算是温故而知新了. 接触python之前是做前端的.一直希望接触面能深一点.因工作需求开始学python,几乎做的都是爬虫..第一个demo就是爬取X ...
- sql 数据库结构导出到文件
SELECT 表名 = Case When A.colorder= Then D.name Else '' End, 表说明 = Case When A.colorder= Then isnull(F ...
- [Android Pro] Android TypedValue.applyDimension()的用法
reference to : http://blog.csdn.net/voo00oov/article/details/45745819 这个方法的作用是 把Android系统中的非标准度量尺寸转 ...
- October 30th Week 45th Sunday 2016
Genius is nothing but labor and diligence. 天才不过是勤奋而已. Labor and diligence are the requirements for s ...
- CSS 中Font Awesome 图标(附码表)
HTML中缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. Font Awesome 传送门:http://fontawesome.das ...
- python爬虫成长之路(二):抓取代理IP并多线程验证
上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程. 一.抓取代理IP 提供免费代理IP的网站还挺多的, ...
- 在dll里malloc/new/cvCreate分配内存,在exe里free/Releases释放内存时会出错。
写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL ...
- Js(DOM) 和Jq 对象的相互转换
JQuery 对象不能使用DOM对象中的方法,同样,Dom对象 不能使用JQuery 中的方法,但有时候 ,我们不得不使用JQuery的方法或者 Dom对象的方法,该怎么办呢? 下面介绍一下 jq对象 ...
- c#中ObservableCollection<T>排序方法
之前用到的一段代码,记录一下 public static class ObservableExtension { public static void Sort<TSource, TKey> ...