您好,登錄后才能下訂單哦!
這篇文章給大家介紹/*+APPEND*/插入性能的示例分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
使用append提示進行insert叫做直接路徑加載插入。
【特點】
1、使用這種提示因為系統不去查找freelist鏈表中的空閑塊,直接在高水標記位以上插入數據,因此速度比較快。但若是對于經常delete的表,浪費磁盤空間太大!
2、它不記錄日志,因此一旦插入的數據在沒有保存回磁盤的時候發生掉電之類的狀況插入的數據不能重做。
3、/*+append*/后,需要馬上提交,否則會影響下一次修改失敗(insert,update,delete)
在Oracle Database 10g Enterprise Edition Release 10.2.0.1.0中,如果插入操作的語法是
insert /*+append*/ into XXX values(XXX);
那么系統加的是row exclusive鎖,也就是正常insert所加的行級鎖,但是如果插入操作的語法是
insert /*+append*/ into XXX select XXX from XXX;
那么系統加的是exclusive鎖,相當于表級鎖,加表級鎖意味著在本會話沒有commit的時候其他任何會話都不能再進行insert,update,delete操作
檢查數據庫歸檔模式(NOARCHIVELOG、ARCHIVELOG):
Archive log list
或者
SELECT log_mode from v$database;
查看當前redo日志大小:
select name,value,class from v$sysstat where name='redo size';
或者打開統計,這個更準確地統計當前語句生成的redo,推薦使用
set autotrace traceonly statistics
普通插入方式:
insert into t select * from dba_objects;
append插入方式:
insert /*+append*/ into t select * from dba_objects;
Append+nologing插入方式:
insert /*+append*/ into t nologging select * from dba_objects;
【測試結論】
1、無論歸檔模式、還是非歸檔模式,append+nologing插入方式效果最好,生成最小的redo日志
2、非歸檔模式下,append插入模式效果不錯
3、歸檔模式下,append插入模式沒有效果
【我的測試】
從以下對比可以看出,增加hint方法,速度增加4倍。
還真的有這么神,都是180萬行的表拷貝,我的測試如下:
insert into p_nbsc_ho1 select * from p_nbsc_ho (消耗時間73分鐘)
insert /*+append*/ into p_nbsc_ho2 select * from p_nbsc_ho (消耗時間7分鐘)
弊端:
insert /*+append*/ 如果不commit的話,會對該表加6級鎖,也就是說,即使此時select 這個表都會報錯。
因此append提示的語句首先不能是業務表,其次要盡快提交commit,所以一般情況不敢用hint了。
關于/*+APPEND*/插入性能的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。