Oracle資料效能優化的若干訣竅

2021-04-13 01:31:56 字數 3163 閱讀 4712

如今,oracle資料庫以其高可靠性、安全性、可相容性,得到越來越多的企業的青睞。如何使oracle資料庫保持優良效能,這是許多資料庫管理員關心的問題,筆者建議不妨針對以下幾個方面加以考慮。

分割槽

根據實際經驗,在乙個大資料庫中,資料庫空間的絕大多數是被少量的表所占有。為了簡 化大型資料庫的管理,改善應用的查詢效能,一般可以使用分割槽這種手段。所謂分割槽就是動態地將表中的記錄分離到若干不同的表空間上,使資料在物理上被分割開 來,便於維護、備份、恢復、事務及查詢效能。當使用的時候可建立乙個連線所有分割槽的檢視,使其在邏輯上仍以乙個整體出現。

1. 建立分割槽表:

create table employee ( 

empno varchar2(10) primary key,

name varchar2(30),

deptno number(2)

)

partition by range(deptno)

( partition part1 values less than (11)

tablespace part1_ts,

partition part2 values less than (21)

tablespace part2_ts,

partition part3 values less than (31)

tablespace part3_ts

partition part4 values less than (maxvalue)

tablespace part4_ts

);

表employee依據deptno列進行分割槽。

2. 分割槽索引:

create index employee_deptno on 

employee(deptno) local (

partition part1 tablespace part1_ndx_ts,

partition part2 tablespace part2_ndx_ts,

partition part3 tablespace part3_ndx_ts,

partition part4 tablespace part4_ndx_ts,

);

當分割槽中出現許多事務並且要保證所有分割槽中的資料記錄的惟一性時採用全域性索引,在建立全域性索 引時,global子句允許指定索引的範圍值,這個範圍值可以不同於表分割槽的範圍值。只有建立區域性索引才會使索引分割槽與表分區間建立起一一對應關係。因 此,在大多數情況下,應該使用區域性索引分割槽。若使用了此索引,分割槽就能夠很容易地將索引分割槽與表分割槽建立關聯,區域性索引比全域性索引更易於管理。

3. 分割槽管理:

根據實際需要,還可以使用alter table 命令來增加、刪除、交換、移動、修改、重新命名、劃分、截短乙個已存在分割槽的結構。

重建索引

如果表中記錄頻繁地被刪除或插入,儘管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,如果表變化不定,索引空間量會不斷增加,不論表中記錄數量是否增加,只是因為索引中無效空間會增加。

要**那些曾被刪除記錄使用的空間,需要使用alter index rebuild 命令。可以做乙個定期執行的批處理程式,來重建最活動表的索引。這個批處理程式可以在空閒時執行,以避免該程式與其他應用程式衝突。若能堅持索引的這一程 序規劃,便可以及時**那些未使用空間,提高空間利用率。

段的碎片整理

當生成乙個資料庫物件時(乙個表或乙個索引),通過使用者預設值或指定值來為它指定表空間。乙個在表空間中生成的段,用於儲存物件的相關資料。在段被關閉、收縮、截斷之前,段所分配的空間將不被釋放。

乙個段是由範圍組成,而範圍是由相鄰的oracle塊組成。一旦存在的範圍不能再儲存新的資料,這個段就會去獲得新的範圍,但並不要求這些範圍是彼此相鄰的。這樣的擴充套件會一直繼續下去,直到表空間中的資料檔案不能提供更多的自由空間,或者範圍數量已達到極限。

因此,乙個碎片太多的資料段,不僅會影響執行,也會引發表空間中的空間管理問題。所以,每個資料段只含有乙個範圍是十分有益的。借助監控系統,可以通過檢查dba_segments資料字典檢視來了解哪些資料庫物件含有10個或更多範圍的段,確定其資料段碎片。

若乙個段的碎片過多,可用兩種方法解決:

1. 用正確的儲存引數建立乙個新錶,將舊表中的資料插入到新錶中,再刪除舊表;

2. 利用export/import工具。

如:

exp system/manager file=exp.dmp

compress=y grants=y indexes=y

tables=(t1,t2)

若輸出成功,進入oracle,刪除上述表。

注:compress=y表示將在輸出過程中修改它們的儲存引數。

imp system/manager file=exp.dmp commit=y buffer=64000 full=y

注:在輸入時重新配置新的儲存引數。

自由範圍的碎片整理

表空間中的乙個自由範圍是表空間中相連的自由(空間)塊的集合。當乙個段關閉時,它 的範圍將被釋放,並被標記為自由範圍。然而,這些自由範圍再也不能與相鄰的自由範圍合併,它們之間的界線始終存在。但是當表空間的預設值 pctincrease設定不是0時,**on後台程序會定期將這些相鄰的自由範圍合併。若pctincrease設定為0,那麼相鄰自由範圍不會被資料 庫自動合併。但可以使用alter table命令「coalesce」選項,來強迫進行相鄰自由範圍的合併。

不進行自由範圍合併,在日後的空間請求中,會影響到表空間中的空間分配。當需要乙個 足夠大的範圍時,資料庫並不會合併相鄰的自由範圍,除非沒有其他選擇。這樣,當表空間中前面較小的自由範圍已被使用時,將使用表空間中後面部分最大的乙個 自由範圍。結果,會因為沒有足夠多的使用空間,從而導致表空間需求的矛盾。由於這樣的情況出現,使資料庫的空間分配距理想越來越遠。自由空間碎片常會出現 在那些經常關閉又重新生成的資料庫表和索引中。

在理想的oracle表空間中,每乙個資料庫物件儲存在乙個單獨的範圍中,並且所有有效自由空間集中在乙個巨大而連續的範圍中。這樣,在乙個物件需要附加儲存空間時,可以在增加獲取足夠大自由空間的可能性的同時,最小化空間中的迴圈呼叫,提高自由空間使用率。 

Tomcat效能優化若干建議

1.安全性配置 去掉自動解壓,自動啟動的配置。去掉遠端關閉的配置 禁用8005埠 去掉或者隱藏版本號 刪除管理員頁面及相關配置檔案 2.效能優化 將ajp服務禁用掉即可 注釋掉 優化併發數 增大初始化執行緒數 增大佇列等待數 增加閒置執行緒的存活時間,另外,tomcat有四種http協議型別,具體對...

oracle 的效能優化

在網上搜尋了一些oracle效能優化的文章,為了更加深層次的鞏固 邊寫邊記 也為了可以隨時檢視,所以發表這篇文章。1.oracle採用自下而上的順序解析where子句,根據這個原理,表之間的連線必須寫在其他where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾。這點本人曾經...

oracle效能優化

今天有個問題沒有答上來 oracle的效能優化。查了查資料,學習學習。優化心得摘抄 資料庫優化oracle9i 很多的時侯,做oracle dba的我們,當應用管理員向我們通告現在應用很慢 資料庫很慢的時侯,我們到資料庫時做幾個示例的select也發現同樣的問題時,有些時侯我們會無從下手,因為我們認...