tom的runstats_pkg工具包關於批次插入和繫結變數分析-01
今天迎來本命年的工作第一天,學習氛圍還算不錯,充滿神奇的2012這一年自身又將有著怎樣的變化,其實真是不得而知。給大家送一個遲來的新年快樂,當然今年可能以後很長一段時間都是堅持 習慣學習oracle,然後期待北漂尋求一份跟oracle開發管理相關的工作,認真的做下去,也期待遇見一個適齡的girl,一個人著實有點孤獨。嗚嗚!
Tom開發的一個用於比較統計方法的工具runstats_pkg
先建立檢視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
建立一個session臨時表
Create global temporary table sys.run_stats
(runid varchar2(40),
Name varchar2(80),
Value number)
On commit preserve rows;
--Runstats_pkg包頭:
create or replace package runstats_pkg
as
procedure rs_start;
procedure rs_middle;
procedure rs_stop(p_difference_threshold in number default 0);
end;
--Runstats_pkg包體:
create or replace package body runstats_pkg
as
g_start number;
g_run1 number;
g_run2 number;
procedure rs_start
as
begin
delete from run_stats;
insert into run_stats select 'before',stats.* from stats;
g_start:=dbms_utility.get_time;
end rs_start;
procedure rs_middle
as
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;--記錄當前時間g_start
end rs_middle;
procedure rs_stop(p_difference_threshold in number default 0)
as
begin
g_run2:=(dbms_utility.get_time-g_start);
dbms_output.put_line('Run1 ran in '||g_run1);
dbms_output.put_line('Run1 ran in '||g_run2);
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',10)||lpad('Run2',10)||lpad('Diff',10));
for x in (
select rpad(a.name,30)||
to_char(b.value-a.value,'9.999.999')||
to_char(c.value-b.value,'9.999.999')||
to_char(round(run1/run2*100,2),'999,99')||'%'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('Latches :');
dbms_output.put_line(lpad('Run1',10)||lpad('Run2',10)||lpad('Diff',10)||lpad('PCT',8));
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/run2*100,2),'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 rs_stop;
end;
利用上述runstats_pkg工具包可以用於區分統計兩種方法產生的時間差和latch使用情況,由於latch是一種低階的序列化鎖,用於保護記憶體不被同時修改,獲取和釋放都非常短,但生產中這種低階的序列化鎖很多時候是系統效能瓶頸所在,某些時候我們甚至更關注latch的使用優先於所用的時間。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1057201/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ROS指令碼ip-mac繫結 批次繫結ip和macROS指令碼Mac
- Sqlserver 關於臨時表和表變數的總結SQLServer變數
- 關於JavaScript中this的軟繫結JavaScript
- 關於動態字串的繫結字串
- oracle和mybatis整合,批次插入OracleMyBatis
- 如何用FGA得到繫結變數的值變數
- 在繫結變數下使用outline變數
- MySQL高階特性——繫結變數MySql變數
- [20180930]in list與繫結變數.txt變數
- [20180912]PLSLQ與繫結變數.txt變數
- Vue select 繫結動態變數Vue變數
- [20180930]in list與繫結變數個數.txt變數
- [20210120]in list與繫結變數個數.txt變數
- 批次繫結幾千個域名
- Javascrip—關於this繫結機制的解析(12)Java
- 【ORACLE】Oracle繫結變數知識梳理Oracle變數
- 繫結變數窺視測試案例變數
- [20191213]共享池繫結變數的值在哪裡.txt變數
- [20221103]繫結變數的分配長度11.txt變數
- [20221030]繫結變數的分配長度10.txt變數
- 關於簡單的資料雙向繫結原理,defineProperty 和Proxy演示
- mybatis批次插入MyBatis
- Yii 批次插入
- [20200326]繫結變數抓取與NULL值.txt變數Null
- 如何在對in操作使用變數繫結(轉)變數
- [20220414]toad與繫結變數peek.txt變數
- V$sql查詢未使用繫結變數的語句SQL變數
- 關於PHP往mysql資料庫中批次插入資料例項教程PHPMySql資料庫
- 關於js變數提升JS變數
- 關於JavaScript變數提升JavaScript變數
- [20231210]執行計劃與繫結變數.txt變數
- [20190506]檢視巢狀與繫結變數.txt巢狀變數
- 關於SAP ABAP字元變數和字串變數字元個數的一個知識點,和一個血案字元變數字串
- 題目 1118: Tom數
- [20191216]共享池繫結變數的值在哪裡2.txt變數
- [20211227]抽取跟蹤檔案中的繫結變數值.txt變數
- C++的動態繫結和靜態繫結C++
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- 原始碼分析:vue和react元件事件繫結中的this原始碼VueReact元件事件