部署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作为一种本地集群 ...
随机推荐
- 如何解决System.Web.HttpRequestValidationException的异常
在.net framework 4.0版本以下, 只需要在web.config中进行如下配置: <configuration> <system.web> & ...
- _NSInlineData objectForKeyedSubscript:
最近总是遇到这个错误:reason: '-[_NSInlineData objectForKeyedSubscript:]: unrecognized selector sent to instanc ...
- 利用yeoman快速搭建React+webpack+es6脚手架
自从前后端开始分离之后,前端项目工程化也显得越来越重要了,之前写过一篇搭建基于Angular+Requirejs+Grunt的前端项目教程,有兴趣的可以点这里去看 但是有些项目可以使用这种方式,但有些 ...
- 数据复制与AA双活(1)
最开始有些概念需要弄明白: 1. 什么是RPO? Wiki: https://en.wikipedia.org/wiki/Recovery_point_objective A recovery poi ...
- 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】
之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...
- Win7 U盘安装Ubuntu16.04 双系统详细教程
Win7 U盘安装Ubuntu16.04 双系统详细教程 安装主要分为以下几步: 一. 下载Ubuntu 16.04镜像软件: 二. 制作U盘启动盘使用ultraISO: 三. 安装Ubuntu系统: ...
- 攻城狮在路上(陆)-- 配置hadoop本地windows运行MapReduce程序环境
本文的目的是实现在windows环境下实现模拟运行Map/Reduce程序.最终实现效果:MapReduce程序不会被提交到实际集群,但是运算结果会写入到集群的HDFS系统中. 一.环境说明: ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- DeepLearning——CNN
工具箱下载 https://github.com/rasmusbergpalm/DeepLearnToolbox CNN_demo代码解析 http://blog.csdn.net/zouxy09/a ...
- 整理:深度学习 vs 机器学习 vs 模式识别
http://www.csdn.net/article/2015-03-24/2824301 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等) http://developer ...