實(shí)現(xiàn)Oracle數(shù)據(jù)處理加速的方案
以下的文章主要是介紹加速Oracle數(shù)據(jù)處理的實(shí)際操作方法,還有在實(shí)際操作中update要比insert要慢的幾點(diǎn)建議的相關(guān)內(nèi)容的描述,如果你對(duì)這一技術(shù)的實(shí)際應(yīng)用,心存好奇的話,以下的文章將會(huì)揭開它的神秘面紗。
一、提高DML操作的辦法:
簡(jiǎn)單說(shuō)來(lái):
1、暫停索引,更新后恢復(fù).避免在更新的過(guò)程中涉及到索引的重建.
2、批量更新,每更新一些記錄后及時(shí)進(jìn)行提交動(dòng)作.避免大量占用回滾段和或臨時(shí)表空間.
3、創(chuàng)建一臨時(shí)的大的表空間用來(lái)應(yīng)對(duì)這些更新動(dòng)作.
4、批量更新,每更新一些記錄后及時(shí)進(jìn)行提交動(dòng)作.避免大量占用回滾段和或臨時(shí)表空間.
5、創(chuàng)建一臨時(shí)的大的表空間用來(lái)應(yīng)對(duì)這些更新動(dòng)作.
6、加大排序緩沖區(qū)
- alter session set sort_area_size=100000000;
- insert into tableb select * from tablea;
- commit;
如果UPDATE的是索引字段,就會(huì)涉及到索引的重建,暫停索引不會(huì)提高多少的速度,反而有可能降低UPDATE速度,
因?yàn)樵诟率撬饕梢蕴岣邤?shù)據(jù)的查詢速度,重建索引引起的速度降低影響不大。
Oracle優(yōu)化修改參數(shù)最多也只能把性能提高15%,大部分都是SQL語(yǔ)句的優(yōu)化!
update總體來(lái)說(shuō)比insert要慢幾點(diǎn)建議:
1、如果更新的數(shù)據(jù)量接近整個(gè)表,就不應(yīng)該使用index而應(yīng)該采用全表掃描
2、減少不必要的index,因?yàn)閡pdate表通常需要update index
3、如果你的服務(wù)器有多個(gè)cpu,采用parellel hint,可以大幅度的提高效率
另外,建表的參數(shù)非常重要,對(duì)于更新非常頻繁的表,建議加大PCTFREE的值,以保證數(shù)據(jù)塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。
二、各種批量DML操作:
(1)、Oracle批量拷貝:
- set arraysize 20
- set copycommit 5000
- copy from username/password@Oraclename append table_name1
- using select * from table_name2;
(2)、常規(guī)插入方式:
- insert into t1 select * from t;
為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志:
- alter table t1 nologging;
- insert into t1 select * from t;
- commit;
(3)、CTAS方式:
- create table t1
- as
- select * from t;
為了提高速度可以使用下面方法,來(lái)減少插入過(guò)程中產(chǎn)生的日志,并且可以制定并行度:
- create table t1 nologging parallel(degree 2) as select * from t;
上述的相關(guān)內(nèi)容就是對(duì)加速Oracle數(shù)據(jù)處理的部分內(nèi)容的描述,希望會(huì)給你帶來(lái)一些幫助在此方面。
【編輯推薦】