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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- MySQL資料庫效能優化之表結構優化(轉)MySql資料庫優化
- Oracle資料庫效能優化Oracle資料庫優化
- ORACLE資料庫效能優化概述Oracle資料庫優化
- 資料庫優化之臨時表優化資料庫優化
- 資料庫效能優化之SQL語句優化資料庫優化SQL
- Oracle資料庫訪問效能優化Oracle資料庫優化
- Oracle資料庫效能優化總結Oracle資料庫優化
- 效能優化之資料庫篇5-分庫分表與資料遷移優化資料庫
- Oracle資料庫資料恢復、效能優化 ASKMACLEANOracle資料庫資料恢復優化Mac
- Oracle資料庫效能優化技術(zt)Oracle資料庫優化
- 資料庫效能優化資料庫優化
- zanePerfor前端監控平臺效能優化之資料庫分表前端優化資料庫
- Oracle DBA優化資料庫效能的心得體會Oracle優化資料庫
- 【轉】關於Oracle資料庫的效能優化心得Oracle資料庫優化
- MySQL 資料庫效能優化之快取引數優化MySql資料庫優化快取
- 資料庫優化之表碎片處理資料庫優化
- Oracle學習系列—資料庫優化—效能優化工具Oracle資料庫優化
- 資料庫效能優化2資料庫優化
- MySQL資料庫效能優化之快取引數優化(轉)MySql資料庫優化快取
- 優化資料庫大幅度提高Oracle的效能(轉)優化資料庫Oracle
- 【轉】Oracle資料庫優化之資料庫磁碟I/OOracle資料庫優化
- 資料庫效能優化之冗餘欄位的作用資料庫優化
- MySQL資料庫的效能優化指南MySql資料庫優化
- [zt] 談資料庫的效能優化資料庫優化
- SQLServer效能優化之 nolock,大幅提升資料庫查詢效能SQLServer優化資料庫
- Oracle資料庫優化Oracle資料庫優化
- 後端思維之資料庫效能優化方案後端資料庫優化
- 資料庫優化效能解析資料庫優化
- 資料庫效能優化總結資料庫優化
- 【效能優化】Oracle 10g 資料庫之間複製統計資訊優化Oracle 10g資料庫
- 如何保持Oracle資料庫的優良效能Oracle資料庫
- Oracle效能優化-資料庫CPU使用率100%Oracle優化資料庫
- 老白Oracle資料庫效能優化實務-視訊分享Oracle資料庫優化
- Django資料庫效能優化之 - 使用Python集合操作Django資料庫優化Python
- oracle效能優化之--hintsOracle優化
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- 資料庫效能優化有哪些方式資料庫優化