runstats工具的配置及使用
runstats是tom寫的一個用來比較同一事件的不同方法的工具。
今天測試一個語句用group by和不用效率有何不同時,頭兒建議用runstats來看。
第一次用,很好很強大。
1、以sys使用者登入,執行下列分配許可權語句。要執行runstats的使用者叫zhaoss
grant select on sys.v_$timer to zhaoss;
grant select on v_$mystat to zhaoss;
grant select on sys.v_$statname to zhaoss;
grant select on sys.v_$latch to zhaoss;
2、以zhaoss使用者登入,執行下列語句建立runstats包:
a>建立stats檢視:
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;
b>建立run_stats全域性臨時表:
create global temporary table run_stats
( runid varchar2( 15),
name varchar2(80 ),
value int
)
on commit preserve rows;
c>建立runstats包定義:
rs_start:執行第一種方法前使用,用來記錄執行前狀態;
rs_middle:執行完第一種方法後,執行第二種方法前執行,用來記錄執行完第一種方法後狀態;
rs_stop:執行完第二種方法後使用,用來生成最終結果。
create or replace package runstats as
procedure rs_start;
procedure rs_middle;
procedure rs_stop(p_difference_threshold in number default 0);
end;
d>建立runstats包體:
create or replace package body runstats 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_time;
end;
procedure rs_middle is
begin
g_run1 := (dbms_utility.get_time - g_start);
insert into run_stats
select 'after 1' , stats.* from stats;
g_start := dbms_utility.get_time;
end;
procedure rs_stop(p_difference_threshold in number default 0) is
begin
g_run2 := (dbms_utility.get_time - g_start);
--add a line here to avoid ora-20000
dbms_output.enable( 480000);
dbms_output.put_line( 'Run1 ran in ' || g_run1 || ' hsecs' );
dbms_output.put_line( 'Run2 ran in ' || g_run2 || ' hsecs' );
dbms_output.put_line( 'run 1 ran in ' ||
round(g_run1 / g_run2 * 100 , 2) ||
'% of the time');
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 / 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;
使用說明:
可以使用
set serveroutput on
或者
spool 1.txt
set serveroutput on
spool off
來顯示或在檔案儲存輸出結果。
SQL> exec runstats.rs_start;
SQL> 第一個執行語句;
SQL> exec runstats.rs_middle;
SQL> 第二個執行語句;
SQL> exec runstats.rs_stop;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-730071/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Tom的runstats工具
- 【實驗】【Tom】runstats工具使用演示
- 效能比較工具runStats_pkg
- sysbench工具手把手安裝配置及使用案例
- Runstats 指令碼指令碼
- WebDAV 配置及相關工具Web
- BUG管理工具MantisBT的安裝配置及使用,親測可用
- runstats安裝方法
- godoc使用及配置Go
- runstats_pkg包的安裝
- VNCServer 配置 及Vncview的使用(zt)VNCServerView
- JEB工具的介紹及使用
- db2 reorg,runstatsDB2
- Flask——配置格式及使用Flask
- apktool的下載配置及使用APK
- Charles 抓包工具安裝及配置
- IBM CommonStore for Lotus Domino在AIX平臺上的手動配置過程及自動配置工具的使用IBMAI
- Docker的安裝配置及使用詳解Docker
- PHPUnit 在 Windows 下的配置及使用教程PHPWindows
- tom的runstats_pkg工具包關於批次插入和繫結變數分析-01變數
- tom的runstats_pkg工具包關於批次插入和繫結變數分析-02變數
- tom的runstats_pkg工具包關於批次插入和繫結變數分析-03變數
- 幾種Linux網路配置工具的使用Linux
- DB2 PL/SQL Example: RunstatsDB2SQL
- SQL最佳化好助手:RunstatsSQL
- 一文解析 MyBatis Generator 的使用及配置MyBatis
- .NET Core 中AutoMapper的配置及使用APP
- MyCat資料庫的基礎配置及使用資料庫
- 跪求?????JBoss中的連線池配置及使用
- Linux下的使用者及使用者組配置Linux
- PHP CS Fixer 的使用及 PHP Storm 配置說明PHPORM
- MyBatis逆向工 maven外掛 generator 的配置及使用MyBatisMaven
- Centos核心安裝 ----yum使用及配置CentOS
- 7.路由器配置及使用路由器
- sqlcipher 命令列使用及工具下載SQL命令列
- k8s中kubeconfig的配置及使用K8S
- Qmail系統的安裝、簡單配置及使用(轉)AI
- XtraBackup工具詳解 Part 4 XtraBackup許可權及配置