ORACLE資料庫效能優化之表的NOLOGGING
通過設定表的NOLOGGING來產生更少的REDO
ORACLE資料庫會對產生改變的操作記錄REDO,比如DDL語句、DML語句,這些操作首先會放在redo buffer中,然後由LGER程式根據觸發條件寫到聯機日誌檔案,如果資料庫開啟歸檔的話,還要在日誌切換的時候歸檔。在這樣一個完整的鏈條上的每一個環節,都可能會成為效能的瓶頸,所以需要引起DBA和資料庫應用人員的注意。
對於我們來說,最好的調優方式就是不產生REDO或者儘量少的產生REDO。
這裡我們需要搞明白,有些操作不管你怎樣都會產生REDO的,比如普通的DML語句(insert、update、delete等),而有些操作我們是可以考慮不產生redo或者少產生redo的。
比如:1、建立或者重建索引
2、直接路徑裝載資料,比如SQL*Loader的direct=y方式、insert into APPEND
3、CTAS方式建立表時
以上列出的不是所有的操作。
下面是一個小的例子,當我們把一個表設定成NOLOGGING模式的時候,通過合適的操作,可以讓oracle產生很少的REDO。
首先確認資料庫處於歸檔模式
system@DB01> conn / as sysdba
Connected.
sys@DB01> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 174
Next log sequence to archive 176
Current log sequence 176
一、如果表採用預設的方式,也就是記錄日誌的方式,不管你是否使用insert into, oracle產生的日誌都會很多
scott@DB01> conn system/oracle
Connected.
system@DB01> create table tj as select * from dba_objects where 1=2;
Table created.
system@DB01> select count(*) from tj;
COUNT(*)
----------
0
system@DB01> select table_name,logging from user_tables where table_name='TJ';
TABLE_NAME LOG
------------------------------ ---
TJ YES
通過autotrace統計redo生成
system@DB01> set autotrace trace stat
1.不採用append 提示
system@DB01> insert into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
1795 recursive calls
4188 db block gets
6913 consistent gets
8 physical reads
5690832 redo size
1131 bytes sent via SQL*Net to client
1199 bytes received via SQL*Net from client
6 SQL*Net roundtrips to/from client
4 sorts (memory)
0 sorts (disk)
50330 rows processed
system@DB01> rollback;
Rollback complete.
2.採用append 提示的方式
system@DB01> insert --+append
into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
228 recursive calls
762 db block gets
5392 consistent gets
0 physical reads
5712972 redo size
1117 bytes sent via SQL*Net to client
1211 bytes received via SQL*Net from client
6 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
50330 rows processed
system@DB01> rollback;
Rollback complete.
通過以上1和2兩種不同方式的比較,我們發現產生的日誌量是差不多的1.5690832 redo size 2.5712972 redo size
二、修改表為不記錄日誌,這個時候insert into就會體現出他的優勢
system@DB01> alter table tj nologging;
Table altered.
1.不採用append 提示
system@DB01> insert into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
211 recursive calls
2732 db block gets
6770 consistent gets
0 physical reads
5542844 redo size
1136 bytes sent via SQL*Net to client
1199 bytes received via SQL*Net from client
6 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
50330 rows processed
system@DB01> rollback;
Rollback complete.
2.採用append 提示的方式
system@DB01> insert --+append
into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
8 recursive calls
698 db block gets
5328 consistent gets
0 physical reads
1524 redo size
1121 bytes sent via SQL*Net to client
1211 bytes received via SQL*Net from client
6 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
50330 rows processed
通過以上1和2兩種不同方式的比較,我們發現產生的日誌量APPEND的方式明顯會少,1.5542844 redo size 2. 1524 redo size。
根據上面的實驗我們可以發現,為了通過減少REDO而提高語句的效能,我們要滿足兩個條件1.表NOLOGGING 2.在語句中使用APPEND提示。
當然我們這裡只是在強調效能,作為一個DBA,在效能和安全之間一定要做一個平衡,當你選擇了NOLOGGING的時候,由於表是不記錄日誌的,那如果資料庫崩潰,這些資料是不能被恢復的。
-->>轉載於:http://blog.sina.com.cn/s/blog_69e7b8d701016usr.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1247722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫優化之臨時表優化資料庫優化
- 效能優化之資料庫篇5-分庫分表與資料遷移優化資料庫
- zanePerfor前端監控平臺效能優化之資料庫分表前端優化資料庫
- Oracle效能優化-資料庫CPU使用率100%Oracle優化資料庫
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- 資料庫效能優化2資料庫優化
- 資料庫效能優化之冗餘欄位的作用資料庫優化
- 後端思維之資料庫效能優化方案後端資料庫優化
- Django資料庫效能優化之 - 使用Python集合操作Django資料庫優化Python
- 資料庫效能優化有哪些方式資料庫優化
- 資料庫效能優化-索引與sql相關優化資料庫優化索引SQL
- 效能優化之資料庫篇2-事務與鎖優化資料庫
- oracle 效能優化Oracle優化
- 資料庫的這些效能優化,你做了嗎?資料庫優化
- 資料庫全表查詢之-分頁查詢優化資料庫優化
- 1.2.9. 任務9:資料庫效能優化資料庫優化
- Part II 診斷和優化資料庫效能優化資料庫
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- oracle資料庫調優描述Oracle資料庫
- 資料庫優化 - SQL優化資料庫優化SQL
- Oracle資料庫表碎片整理Oracle資料庫
- Oracle效能優化方法論的發展之四:基於資源瓶頸分析的優化方法論Oracle優化
- Spark效能優化:優化資料結構Spark優化資料結構
- 資料庫優化資料庫優化
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- MySQL 優化六(InnoDB 下 update 資料出現表鎖之優化)MySql優化
- 效能優化資料庫篇-從單機到叢集優化資料庫
- 最新IP資料庫 儲存優化 查詢效能優化 每秒解析上千萬資料庫優化
- HBase資料庫效能調優OW資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- Oracle 效能優化-expdp備份速度優化02Oracle優化
- Oracle 效能優化-expdp備份速度優化03Oracle優化
- 資料庫結構的優化資料庫優化
- 使用資源管理器優化Oracle效能AQ優化Oracle
- 資料庫優化SQL資料庫優化SQL
- MySQL資料庫優化MySql資料庫優化