[Oracle] Insert into速度測試nologging+parallel
C:\Users\Admin>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 4 13:24:02 2016
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\arch
最早的聯機日誌序列 1651
下一個存檔日誌序列 1653
當前日誌序列 1653
SQL> create table bruce5 as select * from bruce where 1=2;
表已建立。
SQL> insert into bruce5 select * from bruce;
已建立83324928行。
已用時間: 00: 09: 06.82
SQL> commit;
提交完成。
SQL>
SQL> select segment_name,bytes/1024/1024/1024 from user_segments;
SEGMENT_NAME BYTES/1024/1024/1024
-------------------- --------------------
BRUCE 8.875
BRUCE1 8.9375
BRUCE2 8.88769531
BRUCE3 8.88317871
BRUCE4 8.88317871
BRUCE5 8.875
SQL> create table bruce6 as select * from bruce where 1=2;
表已建立。
SQL> insert /*+nologging*/ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 10: 17.63
SQL> commit;
提交完成。
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.64
SQL> insert /*+append nologging*/ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 08: 07.45
SQL> commit;
提交完成。
SQL> alter table bruce6 nologging;
表已更改。
已用時間: 00: 00: 00.03
SQL> select table_name,logging from user_tables where table_name='BRUCE6';
TABLE_NAME LOGGIN
------------------------------------------------------------ ------
BRUCE6 NO
SQL> insert /*+ append */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 46.54
SQL> commit;
提交完成。
已用時間: 00: 00: 00.06
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.29
SQL> insert into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 09: 47.17
SQL> commit;
提交完成。
已用時間: 00: 00: 00.00
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.53
SQL> select logging from user_tables where table_name='BRUCE6';
LOGGIN
------
NO
已用時間: 00: 00: 00.03
SQL> insert /*+ append parallel(bruce6 2) */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 49.58
SQL> commit;
提交完成。
已用時間: 00: 00: 00.06
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.26
已用時間: 00: 00: 00.00
SQL> alter session enable parallel dml;
會話已更改。
已用時間: 00: 00: 00.01
SQL> insert /*+ append parallel(bruce6 2) */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 05: 03.96
SQL> commit;
提交完成。
已用時間: 00: 00: 00.03
SQL> alter table bruce6 parallel 2;
表已更改。
已用時間: 00: 00: 00.00
SQL>
SQL> select logging,degree from user_tables where table_name='BRUCE6';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
NO 2
已用時間: 00: 00: 00.01
SQL> ALTER SESSION ENABLE PARALLEL DML;
會話已更改。
已用時間: 00: 00: 00.00
SQL> insert /*+ append */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 46.48
SQL> COMmit;
提交完成。
已用時間: 00: 00: 00.01
---------------------------------------------------------------------
table是logging | 普通情況 | 09: 06.82
table是logging | /*+append nologging*/ | 08: 07.45
table是nologging | /*+append*/ | 02: 46.54
table是nologging | 無hint | 09: 47.17
table是nologging + parallel | /*+ append parallel(bruce6 2) */ | 05: 03.96 時間更長,會使用temp表空間的資料
table是nologging + parallel | /*+ append */ | 02: 46.48
(1) alter table nologging + append(direct insert) 可以大幅提高insert資料
(2) alter table nologging + append(direct insert) + parallel 沒有 (1)的情況好,但是比普通insert的資料塊
SQL> select logging,degree from user_tables where table_name='BRUCE6';
LOGGIN DEGREE
--------------------------------------------------------------------------------
NO 2
SQL> alter session enable parallel dml;
會話已更改。
已用時間: 00: 00: 00.00
SQL> insert /*+ append */ into bruce6 select /*+parallel(bruce 2)*/ * from bruce
2 ;
已建立83324928行。
已用時間: 00: 00: 58.06
SQL> select logging,degree from user_tables where table_name='BRUCE7';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
YES 1
SQL> select logging,degree from user_tables where table_name='BRUCE7';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
NO 1
已用時間: 00: 00: 00.01
SQL> insert /*+ append */ into bruce7 select /*+parallel(bruce 2)*/ * from bruce;
已建立83324928行。
已用時間: 00: 01: 02.75
SQL> commit;
提交完成。
已用時間: 00: 00: 00.07
在後面的select中加上/*+parallel(bruce 2)*/ 還是可以加快速度的.
透過上面的實驗 insert 大量的資料的時候,透過以下幾個方面可以加快資料
(1) alter table xxxx nologging
(2) alter table xxxx parallel n;
(3) insert後面的select 中加上/*+parallel (xxxx n)*/ 的hint可以加快速度
(4) 執行insert之前記得 alter session enable parallel dml;
(5) 執行完成之後,切記將 table的logging和degree屬性改回來
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 4 13:24:02 2016
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> archive log list;
資料庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\arch
最早的聯機日誌序列 1651
下一個存檔日誌序列 1653
當前日誌序列 1653
SQL> create table bruce5 as select * from bruce where 1=2;
表已建立。
SQL> insert into bruce5 select * from bruce;
已建立83324928行。
已用時間: 00: 09: 06.82
SQL> commit;
提交完成。
SQL>
SQL> select segment_name,bytes/1024/1024/1024 from user_segments;
SEGMENT_NAME BYTES/1024/1024/1024
-------------------- --------------------
BRUCE 8.875
BRUCE1 8.9375
BRUCE2 8.88769531
BRUCE3 8.88317871
BRUCE4 8.88317871
BRUCE5 8.875
SQL> create table bruce6 as select * from bruce where 1=2;
表已建立。
SQL> insert /*+nologging*/ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 10: 17.63
SQL> commit;
提交完成。
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.64
SQL> insert /*+append nologging*/ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 08: 07.45
SQL> commit;
提交完成。
SQL> alter table bruce6 nologging;
表已更改。
已用時間: 00: 00: 00.03
SQL> select table_name,logging from user_tables where table_name='BRUCE6';
TABLE_NAME LOGGIN
------------------------------------------------------------ ------
BRUCE6 NO
SQL> insert /*+ append */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 46.54
SQL> commit;
提交完成。
已用時間: 00: 00: 00.06
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.29
SQL> insert into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 09: 47.17
SQL> commit;
提交完成。
已用時間: 00: 00: 00.00
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.53
SQL> select logging from user_tables where table_name='BRUCE6';
LOGGIN
------
NO
已用時間: 00: 00: 00.03
SQL> insert /*+ append parallel(bruce6 2) */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 49.58
SQL> commit;
提交完成。
已用時間: 00: 00: 00.06
SQL> truncate table bruce6;
表被截斷。
已用時間: 00: 00: 00.26
已用時間: 00: 00: 00.00
SQL> alter session enable parallel dml;
會話已更改。
已用時間: 00: 00: 00.01
SQL> insert /*+ append parallel(bruce6 2) */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 05: 03.96
SQL> commit;
提交完成。
已用時間: 00: 00: 00.03
SQL> alter table bruce6 parallel 2;
表已更改。
已用時間: 00: 00: 00.00
SQL>
SQL> select logging,degree from user_tables where table_name='BRUCE6';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
NO 2
已用時間: 00: 00: 00.01
SQL> ALTER SESSION ENABLE PARALLEL DML;
會話已更改。
已用時間: 00: 00: 00.00
SQL> insert /*+ append */ into bruce6 select * from bruce;
已建立83324928行。
已用時間: 00: 02: 46.48
SQL> COMmit;
提交完成。
已用時間: 00: 00: 00.01
---------------------------------------------------------------------
table是logging | 普通情況 | 09: 06.82
table是logging | /*+append nologging*/ | 08: 07.45
table是nologging | /*+append*/ | 02: 46.54
table是nologging | 無hint | 09: 47.17
table是nologging + parallel | /*+ append parallel(bruce6 2) */ | 05: 03.96 時間更長,會使用temp表空間的資料
table是nologging + parallel | /*+ append */ | 02: 46.48
(1) alter table nologging + append(direct insert) 可以大幅提高insert資料
(2) alter table nologging + append(direct insert) + parallel 沒有 (1)的情況好,但是比普通insert的資料塊
SQL> select logging,degree from user_tables where table_name='BRUCE6';
LOGGIN DEGREE
--------------------------------------------------------------------------------
NO 2
SQL> alter session enable parallel dml;
會話已更改。
已用時間: 00: 00: 00.00
SQL> insert /*+ append */ into bruce6 select /*+parallel(bruce 2)*/ * from bruce
2 ;
已建立83324928行。
已用時間: 00: 00: 58.06
SQL> select logging,degree from user_tables where table_name='BRUCE7';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
YES 1
SQL> select logging,degree from user_tables where table_name='BRUCE7';
LOGGIN DEGREE
------ --------------------------------------------------------------------------------
NO 1
已用時間: 00: 00: 00.01
SQL> insert /*+ append */ into bruce7 select /*+parallel(bruce 2)*/ * from bruce;
已建立83324928行。
已用時間: 00: 01: 02.75
SQL> commit;
提交完成。
已用時間: 00: 00: 00.07
在後面的select中加上/*+parallel(bruce 2)*/ 還是可以加快速度的.
透過上面的實驗 insert 大量的資料的時候,透過以下幾個方面可以加快資料
(1) alter table xxxx nologging
(2) alter table xxxx parallel n;
(3) insert後面的select 中加上/*+parallel (xxxx n)*/ 的hint可以加快速度
(4) 執行insert之前記得 alter session enable parallel dml;
(5) 執行完成之後,切記將 table的logging和degree屬性改回來
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2126967/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Oracle] Create table as 速度測試nologging+parallelOracleParallel
- [Oracle] Create index速度測試nologging+parallelOracleIndexParallel
- 關於加快INSERT語句執行速度的測試
- 【MYSQL備庫恢復速度測試 半同步速度測試】MySql
- oracle insert插入number(1)列的資料小測試Oracle
- Oracle資料庫中Insert、Update、Delete操作速度Oracle資料庫delete
- paddleocr速度測試
- SQLTest系列之INSERT語句測試SQL
- oracle redo日誌產生量測試及比較2_insertOracle Redo
- 如何測試伺服器的速度伺服器
- 伺服器的速度如何測試伺服器
- JavaScript表格元件載入速度測試JavaScript元件
- 關於insert /*+ append*/ 各種insert插入速度比較APP
- Angular單元測試如何只執行指定的測試用例,提高測試速度Angular
- 不同insert操作產生的undo的測試
- CTAS和insert append的一個測試APP
- hdparm 測試硬碟讀寫速度I/O硬碟
- oracle JDBC insert 最佳化(二) :使用批次寫入,提高oracle資料庫寫速度OracleJDBC資料庫
- Oracle中的insert/insert all/insert firstOracle
- 表number列的資料插入insert小測試
- 無程式碼的啟動速度測試 with stagesepx
- 如何測試伺服器的訪問速度伺服器
- SM951 linux centos fio 速度測試LinuxCentOS
- 如何對Mac進行基礎檢測和速度測試Mac
- 測試oracle sqlldrOracleSQL
- ORACLE 測試題:Oracle
- Oracle 的 INSERT ALL和INSERT FIRSTOracle
- Oracle Insert BLOBOracle
- 3 個方便的命令列網速度測試工具命令列
- 免費開源的速度測試軟體:openspeedtest
- 怎麼測試伺服器的訪問速度伺服器
- [轉載] expdp, exp和sqluldr2 速度測試SQL
- Linux測試點對點連線速度工具Linux
- 測試兩臺電腦的網路連線速度
- 加快insert into select速度with hints and nologging
- 測試APPEND INSERT是否產生UNDO資訊的過程APP
- ORACLE壓力測試Oracle
- Oracle TDE加密測試Oracle加密