oracle logfile sync,oracle等待事件3构造一个DirectPathwrite等待事件和构造一个LogFileSync等待事件...
第一篇《oracle等待事件1分別用表和索引上數(shù)據(jù)的訪問來產(chǎn)生dbfilescatteredread等待事件》http://leonarding.blog.51cto.com/6045525/1105411第二篇《oracle等待
第一篇 《oracle等待事件1分別用表和索引上數(shù)據(jù)的訪問來產(chǎn)生db file scattered read等待事件》
第二篇 《oracle等待事件2構(gòu)造一個DB File Sequential Read等待事件和構(gòu)造一個Direct Path Read等待事件》
第三篇 《oracle等待事件3構(gòu)造一個Direct Path write等待事件和構(gòu)造一個Log File Sync等待事件》
Dear All:
歷經(jīng)5天的oracle等待事件系列大功告成,不容易a多少個不眠之夜,多少次無盡猜想,在此做首打油詩留念
《2012終日有感》
壯志未酬oracle
夜點明燈苦用功
只為不白少年頭
報答老師抱mm
五構(gòu)造一個Direct Path write等待事件,等待事件需要在v$session_wait和10046 trace文件中顯示出來,貼出整個演示過程。
Direct path write 等待事件:發(fā)生在“寫入磁盤”的時候,因為寫也是一種中間狀態(tài),只要是中間狀態(tài)數(shù)據(jù)就沒有必要共享給其他用戶,所以這些數(shù)據(jù)也不會放在SGA中共享,從PGA中 -> 直接寫入 -> 磁盤。
場景: append方式插入數(shù)據(jù),這種方式插入數(shù)據(jù)的時候會跳過SGA的data_buffer_cache,直接插入數(shù)據(jù)文件,并且還不會掃描數(shù)據(jù)文件中的空閑空間直接插入到文件尾所以效率較高
當(dāng)數(shù)據(jù)排序時候,如果PGA被裝滿,香港虛擬主機(jī),就會被寫入到磁盤的temp表空間里,美國服務(wù)器,因為排序的數(shù)據(jù)是中間狀態(tài)也不會經(jīng)過SGA,所以會產(chǎn)生“direct path write”等待事件
LEO1@LEO1> select table_name,index_name from user_indexes where table_name='LEO1'; 利用leo1表
TABLE_NAME INDEX_NAME
------------------------------ -------------------------------------------
LEO1 IDX_LEO1
LEO1@LEO1> select count(*) from leo1; 有71959行記錄
COUNT(*)
------------------
71959
LEO1@LEO1> execute dbms_stats.gather_table_stats(ownname=>'LEO1',tabname=>'LEO1',cascade=>TRUE);
PL/SQL procedure successfully completed. 統(tǒng)計分析
v$session_wait視圖中顯示出來
LEO1@LEO1> set serveroutput on
LEO1@LEO1> create or replace procedure p4
as
begin
for i in 1..8
loop
insert /*+ append */ into leo1 select * from leo1;
rollback;
end loop;
dbms_output.put_line('successfully');
end;
/
2 3 4 5 6 7 8 9 10 11
Procedure created.
創(chuàng)建存儲過程p4循環(huán)8次,添加了append hint執(zhí)行直接插入,在這個期間會發(fā)生“direct path write”等待事件
Append 注意事項
Append方式叫做直接路徑加載,使用這種方式是因為oracle不會在掃描freelist鏈表中的空閑塊,直接在高水線之后插入數(shù)據(jù),所以速度比較快。
(1)append方式不記錄redo,一旦在插入的過程中沒有保存到磁盤或者發(fā)生掉電情況那么插入的數(shù)據(jù)不能恢復(fù)
(2)由于不在利用表的空閑空間,那么這種方式比較浪費存儲空間,就是以空間換時間
(3)insert /*+ append */ into leo1 select * from leo1;會對這個表添加一個6級鎖,意味著在沒有commit/rollback前提下任何會話 insert update delete select 等操作都不允許,否則會報錯
ORA-12838: cannot read/modify an object after modifying it in parallel
解釋如下:
總結(jié)
以上是生活随笔為你收集整理的oracle logfile sync,oracle等待事件3构造一个DirectPathwrite等待事件和构造一个LogFileSync等待事件...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot使用mybatis_
- 下一篇: echo添加换行 linux_在 Lin