国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

保持Oracle數據庫優良性能的若干訣竅

2024-08-29 13:45:26
字體:
來源:轉載
供稿:網友
如今,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,
);
當分區中出現許多事務并且要保證所有分區中的數據記錄的唯一性時采用全局索引,如:
Create index Employee_DeptNo on Employee(DeptNo)
global partition by range (DeptNo)
(
partition PART1 values less than (11)
tablespace PART1_NDX_TS,
partition PART2 values less than (21)
tablespace PART2_NDX_TS,
partition PART3 values less than (31)
tablespace PART3_NDX_TS
partition PART4 values less than (MAXVALUE)
tablespace PART4_NDX_TS
);
在建立全局索引時,global子句答應指定索引的范圍值,這個范圍值可以不同于表分區的范圍值。只有建立局部索引才會使索引索引分區與表分區間建立起一一對應關系。因此,在大多數情況下,應該使用局部索引分區。若使用了此索引,分區就能夠很輕易地將索引分區與表分區建立關聯,局部索引比全局索引更易于治理。
3、分區治理
根據實際需要,還可以使用 alter table 命令來增加、丟棄、交換、移動、修改、重命名、劃分、截短一個已存在分區的結構。

Rebuild Indexes
假如表中記錄頻繁的被刪除或插入,盡管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,假如表變化不定,索引空間量會不斷增加,不管表中記錄數量是否增加——只僅僅是因為索引中無效空間量的增加。
要回收那些曾被刪除記錄使用的空間,需要使用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時,SMON后臺進會定期的將這些相鄰的自由范圍合并。若pctincrease設置為0,那相鄰自由范圍不會被數據庫自動合并。但可以使用altertable命令coalesce選項,來強迫進行相鄰自由范圍的合并。
不進行自由范圍合并,在日后的空間請求中,會影響到表空間中的空間分配。當需要一個足夠大的范圍時,數據庫并不會合并相鄰的自由范圍,除非沒有其他選擇。這樣,當表空間中前面較小自由范圍已被相關使用時,將使用表空間中后面部分最大的一個自由范圍。結果,會因為它們沒有足夠多的使用空間,從而導致表空間中速度上的矛盾。由于這樣的進程出現,使數據庫的空間分配距理想越來越遠。自由空間碎片常會出現在那些經常關閉又重新生成的數據庫表和索引中。
在理想的ORACLE表空間中,每一個數據庫對象存儲在一個單獨的范圍中,并且所有有效自由空間集中在一個巨大而連續的范圍中。這樣,在一個對象需要附加存儲空間時,可以在增加獲取足夠大自由空間的可能性同時,最小化空間中的循環調用,提高自由空間使用率。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿尔山市| 博白县| 太湖县| 农安县| 诸城市| 山西省| 错那县| 尚义县| 新民市| 涡阳县| 德州市| 会昌县| 和田县| 平利县| 万州区| 龙泉市| 高阳县| 新宁县| 宁安市| 江口县| 揭阳市| 东光县| 托克托县| 陵水| 兰西县| 余干县| 镶黄旗| 齐齐哈尔市| 乐清市| 济源市| 仙居县| 固原市| 伊宁市| 吴川市| 怀宁县| 远安县| 定日县| 屏山县| 卢龙县| 兴安盟| 金昌市|