oracle执行runstats,Oracle编程艺术--配置环境:runstats脚本
runstats脚本目的:
对做同一件事的两个不同方法进行比较,得出孰优孰劣的结果。
实操中注意事项:
在创建runstats_pkg包时一直报权限不足,执行 grant create procedure to user ; 即可。
(自己的数据库,当然有dba用户了)
关于用户权限的几个命令:
grant create session to zs;
grant create session,create table to zs;
grant connect to zs;
grant connection,resource to zs;
grant select on zs.x to ls;
grant insert,update on zs.x to ls;
附 脚本代码:
set echo on
drop table run_stats;
create global temporary table run_stats
( runid varchar2(15),
name varchar2(80),
value int )
on commit preserve rows;
grant select any table to ops$tkyte;
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;
delete from run_stats;
commit;
create or replace package runstats_pkg
as
procedure rs_start;
procedure rs_middle;
procedure rs_stop( p_difference_threshold in number default 0 );
end;
/
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 0)
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 <> 0 )
then
dbms_output.put_line
( 'run 1 ran in ' || round(g_run1/g_run2*100,2) ||
'% of the time' );
end if;
dbms_output.put_line( chr(9) );
insert into run_stats
select 'after 2', stats.* from stats;
dbms_output.put_line
( rpad( 'Name', 30 ) || lpad( 'Run1', 12 ) ||
lpad( 'Run2', 12 ) || lpad( 'Diff', 12 ) );
for x in
( select rpad( a.name, 30 ) ||
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) > 0
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(9) );
dbms_output.put_line
( 'Run1 latches total versus runs -- difference and pct' );
dbms_output.put_line
( lpad( 'Run1', 12 ) || lpad( 'Run2', 12 ) ||
lpad( 'Diff', 12 ) || lpad( 'Pct', 10 ) );
for x in
( select to_char( run1, '999,999,999' ) ||
to_char( run2, '999,999,999' ) ||
to_char( diff, '999,999,999' ) ||
to_char( round( run1/decode( run2, 0, to_number(0), run2) *100,2 ), '99,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;
/
commit;
/*
exec runStats_pkg.rs_start;
exec runStats_pkg.rs_middle;
exec runStats_pkg.rs_stop;
*/
标签:dbms,stats,name,编程,999,value,Oracle,run,runstats
来源: https://blog.csdn.net/shafatutu/article/details/100746692
oracle执行runstats,Oracle编程艺术--配置环境:runstats脚本相关推荐
- Oracle 9i amp; 10g编程艺术-深入数据库体系结构——第12章:数据类型
第12章 数据类型 选择一个正确的数据类型,这看上去再容易不过了,但我屡屡见得选择不当的情况.要选择什么类型来存储你的数据,这是一个最基本的决定,而且这个决定 ...
- Linux中设置开机启动执行命令和普通用户配置环境变量开机启动生效
记录:343 场景:在CentOS 7.9操作系统上,开机启动就执行自定义的命令,配置rc.local文件达到需求:在普通用户中配置环境变量开机启动生效,使用profile实现. 版本: 操作系统:C ...
- 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释
一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...
- oracle执行文件,Oracle执行外部文件:
Oracle执行外部文件: Oracle执行外部文件: c:>sqlplus user/pwd@db sql>@new.sql 执行多个sql文件: 1.把所有的文件都放在同一个目录下,然 ...
- 停止oracle执行session,Oracle 强制中止正在执行的SQL语句
-- 1 查询正在执行的sql语句 select b.sid, b.username, b.serial#, a.spid, b.paddr, c.sql_text, b.machine from v ...
- oracle执行减法,oracle时间的加法和减法
对于oracle时间,我们可以根据我们实际的需求,进行加减法计算.下面就为您详细介绍oracle时间的加法和减法,希望对您学习oracle时间方面能有所帮助. 加法 select sysdate,ad ...
- Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)
Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...
- oracle 执行sql,Oracle动态执行SQL
方式1 CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AS cursor_name INTEGER; rows_processed INTEGE ...
- xmap 配置php环境,安装和配置环境
Composer 安装 thinkphp5.1版本官方开始不提供代码直接下载,转而使用composer,或者git进行安装下载.对于一些不熟悉版本控制git来书可能是一个难点.或者composer也是 ...
最新文章
- web类协议脚本-飞机订票系统示例
- 对网络骚扰和霸凌说不!神经网络可以做得更好
- HTML的标签描述3
- 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队
- MatConvnet工具箱文档翻译理解(4)
- Django Views(视图函数)
- 解决flask端口被占用的问题
- Swift3 Scanner用法之判断是否数字、提取字符串里的数字
- 用python生成云词汇_用python生成词云wordcloud
- python游戏源码回合制游戏_python game源码下载
- 怎样查看本机到一个网站经过多少路由节点?
- 【编程语言】【Ruby】语言介绍
- Springboot微信点餐系统——01项目设计以及初步环境搭建
- wifi大师分销多开v3.1.5安装教程附带源码
- 计算机技术与应用论文,计算机应用技术论文
- Qt5软键盘实现中文拼音输入法
- 学画画要花多少钱_孩子学画画大约需要多少钱呢?
- project2016调配资源冲突
- openwrt固件的下载编译流程
- 一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起