部署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作为一种本地集群 ...
随机推荐
- [原创]Windows Server 2003 物理机转换为VMware虚拟机出现VSS错误的处理
一台Windows Server 2003 物理机需要转换为VMware虚拟机,工具为Vmware vCenter Converter Standalone 6.0,转换开始就出现错误“FAILED: ...
- Yii 1开发日记 -- 后台搜索功能下拉及关联表搜索
Yii 1 实现后台搜索,效果如下: 一. 下拉搜索: 1.模型中和常规的一样 if (isset($_GET['agency']['status']) && $_GET['agenc ...
- Flask 框架入门
Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...
- IBM Z上邮件服务器的配置相关内容
https://www.ibm.com/support/knowledgecenter/SSLTBW_1.13.0/com.ibm.zos.r13.halz002/sen.htm#sen 每次搜太费劲 ...
- python之面向对象
首先我们应该知道,python在设计之初就已经是一门面向对象的语言,所以说python中创建一个类和对象是很容易的. 面向对象的技术简介 类(class):用来描述具有相同的属性和方法的对象的集合.它 ...
- KVO __ 浅谈
KVO :Key-Value Observing 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了. ...
- css中“~”和“>”是什么意思?
css中"~"是: 为所有相同的父元素中位于 p 元素之后的所有 ul 元素设置背景: p~ul{ background:#ff0000; } <p>快乐生活&l ...
- javascript面向切面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 2003服务器搭建vpn
先说下为什么会有本文,公司的git突然被防火墙屏蔽了,有些同事无奈用4g网去提交,我比较穷,1g的小水管hold不住,于是我想着用vpn.国内封杀的比较严重,免费的更是少,找朋友要了一个3小时试用的, ...
- HBase JavaAPI操作示例
package testHBase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBase ...