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脚本相关推荐

  1. Oracle 9i amp; 10g编程艺术-深入数据库体系结构——第12章:数据类型

    第12章                      数据类型 选择一个正确的数据类型,这看上去再容易不过了,但我屡屡见得选择不当的情况.要选择什么类型来存储你的数据,这是一个最基本的决定,而且这个决定 ...

  2. Linux中设置开机启动执行命令和普通用户配置环境变量开机启动生效

    记录:343 场景:在CentOS 7.9操作系统上,开机启动就执行自定义的命令,配置rc.local文件达到需求:在普通用户中配置环境变量开机启动生效,使用profile实现. 版本: 操作系统:C ...

  3. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  4. oracle执行文件,Oracle执行外部文件:

    Oracle执行外部文件: Oracle执行外部文件: c:>sqlplus user/pwd@db sql>@new.sql 执行多个sql文件: 1.把所有的文件都放在同一个目录下,然 ...

  5. 停止oracle执行session,Oracle 强制中止正在执行的SQL语句

    -- 1 查询正在执行的sql语句 select b.sid, b.username, b.serial#, a.spid, b.paddr, c.sql_text, b.machine from v ...

  6. oracle执行减法,oracle时间的加法和减法

    对于oracle时间,我们可以根据我们实际的需求,进行加减法计算.下面就为您详细介绍oracle时间的加法和减法,希望对您学习oracle时间方面能有所帮助. 加法 select sysdate,ad ...

  7. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)

    Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...

  8. oracle 执行sql,Oracle动态执行SQL

    方式1 CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AS cursor_name INTEGER; rows_processed INTEGE ...

  9. xmap 配置php环境,安装和配置环境

    Composer 安装 thinkphp5.1版本官方开始不提供代码直接下载,转而使用composer,或者git进行安装下载.对于一些不熟悉版本控制git来书可能是一个难点.或者composer也是 ...

最新文章

  1. web类协议脚本-飞机订票系统示例
  2. 对网络骚扰和霸凌说不!神经网络可以做得更好
  3. HTML的标签描述3
  4. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队
  5. MatConvnet工具箱文档翻译理解(4)
  6. Django Views(视图函数)
  7. 解决flask端口被占用的问题
  8. Swift3 Scanner用法之判断是否数字、提取字符串里的数字
  9. 用python生成云词汇_用python生成词云wordcloud
  10. python游戏源码回合制游戏_python game源码下载
  11. 怎样查看本机到一个网站经过多少路由节点?
  12. 【编程语言】【Ruby】语言介绍
  13. Springboot微信点餐系统——01项目设计以及初步环境搭建
  14. wifi大师分销多开v3.1.5安装教程附带源码
  15. 计算机技术与应用论文,计算机应用技术论文
  16. Qt5软键盘实现中文拼音输入法
  17. 学画画要花多少钱_孩子学画画大约需要多少钱呢?
  18. project2016调配资源冲突
  19. openwrt固件的下载编译流程
  20. 一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起

热门文章

  1. Linux - iptables
  2. MySQL: 查看一次SQL的执行时间都花在哪些环节上
  3. volatile 线程内存模型
  4. Git.gitignore规则不生效的解决办法
  5. 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
  6. JAVA 自定义注解在自动化测试中的使用
  7. [转载] python3.6版本生成的python脚本如何打包为可独立执行的exe程序
  8. [转载] python3 闭包
  9. CountDownLatch和cyclicbarrier的使用
  10. pycharm出现乱码