oracle实现分段,用Oracle分段空间管理功能改进数据库性能
如果Oracle數(shù)據(jù)庫(kù)表出現(xiàn)大量碎片數(shù)據(jù),則會(huì)浪費(fèi)磁盤空間和嚴(yán)重影響性能。這時(shí)可以使用Oracle分段空間管理功能,特別是Oracle數(shù)據(jù)庫(kù)分段壓縮功能。
更新或刪除表的記錄,會(huì)在數(shù)據(jù)塊中形成許多的空白空間。一些空白空間會(huì)被后來(lái)插入的記錄重用。然而,刪除和插入的大小差別會(huì)產(chǎn)生極小的碎片空間,以至它們永遠(yuǎn)也不會(huì)被再使用。此外,在一個(gè)已經(jīng)刪除大量記錄的表中,表分段將在高位線下包含大量的稀疏(或空白)塊。這樣會(huì)大大降低全表掃描的效率。
在線分段壓縮功能是Oracle分段空間管理的首選方法,它會(huì)回收分段中高位線之下的碎片空閑空間。在線分段壓縮操作不同于ALTER TABLE、INDEX或CLUSTER命令的DEALLOCATE UNUSED子句。解除分配操作會(huì)直接釋放分段中高位線之上的空閑空間。壓縮分段會(huì)整合高位線之下的碎片空閑空間和壓縮數(shù)據(jù)。高位線將向下移,回收的空間將會(huì)釋放。在壓縮操作執(zhí)行之后,分段的數(shù)據(jù)將保存到較少的塊中。這樣可以優(yōu)化緩存使用率,并且減少全表掃描時(shí)要讀取的塊數(shù)。
使用分段壓縮的Oracle分段空間管理
分段壓縮可以在使用表的工作時(shí)間執(zhí)行。它不會(huì)影響DML操作或查詢,也不需要額外的磁盤空間。在壓縮操作結(jié)束時(shí),并發(fā)DML操作將會(huì)暫停一小段時(shí)間,這段時(shí)間將用于釋放一些空間。分段的所有索引都會(huì)在壓縮操作期間保持不變。在操作完成之后,它們一樣保持不變。
壓縮操作會(huì)在物理上將數(shù)據(jù)文件的記錄移到新位置。要實(shí)現(xiàn)這個(gè)操作,必須使用ALTER TABLE.ENABLE ROW MOVEMENT命令,啟用對(duì)象的記錄移動(dòng)。然后,還需要禁用分段中所有基于記錄ID的觸發(fā)器。此外,壓縮操作只能在本地管理且啟動(dòng)自動(dòng)分段空間管理的表空間的分段上執(zhí)行。在線分段壓縮不支持以下幾種分段類型:壓縮表、IOT表、SecureFile LOB、有若干功能索引的表及有基于ID的物化視圖的表。
要分析在線壓縮分段是否會(huì)提高分段的運(yùn)行效率,最簡(jiǎn)單方法是使用Segment Advisor。Segment Advisor會(huì)檢查自動(dòng)負(fù)載庫(kù)的使用率和增長(zhǎng)統(tǒng)計(jì)信息,并從分段提取抽樣數(shù)據(jù),從而確定可以回收空間的分段。默認(rèn)情況下,分析工具會(huì)在維護(hù)時(shí)間內(nèi)作為一個(gè)自動(dòng)化維護(hù)任務(wù)執(zhí)行。此外,它也可以手動(dòng)執(zhí)行。如果分析工具發(fā)現(xiàn)一個(gè)分段可以回收大量的空閑空間,那么它會(huì)建議執(zhí)行一次在線分段壓縮操作。如果對(duì)象不適合執(zhí)行分段壓縮操作,那么它會(huì)建議在線重新定義表(也稱為重組)。執(zhí)行在線重定義的最終結(jié)果與在線分段壓縮很相似。然而,重定義操作在執(zhí)行過(guò)程中需要使用額外的磁盤空間。
Oracle分段空間管理工作可以壓縮表、索引表、索引、分區(qū)、子分區(qū)、物化視圖或物化視圖日志的空間。這個(gè)操作的執(zhí)行方式是:在各種ALTER語(yǔ)句(例如,ALTER TABLE、ALTER INDEX、ALTER MATERIALIZED VIEW或ALTER MATERIALIZED VIEW LOG)中使用SHRINK SPACE子句。此外,SHRINK SPACE子句還有兩個(gè)可選關(guān)鍵字,它可以控制壓縮操作的行為:COMPAT – 在子句中指定這個(gè)參數(shù),就會(huì)把壓縮分段操作分布兩個(gè)階段。數(shù)據(jù)庫(kù)會(huì)整理分段空間的碎片,壓縮表的記錄,但是壓縮操作不會(huì)重置高位線或釋放空間。這個(gè)參數(shù)通常用在一些沒有長(zhǎng)查詢操作的數(shù)據(jù)庫(kù),這些表查詢可能會(huì)跨越多個(gè)操作,它們會(huì)試圖從回收塊中讀取數(shù)據(jù)。在數(shù)據(jù)庫(kù)活動(dòng)較少的時(shí)候,數(shù)據(jù)庫(kù)會(huì)執(zhí)行第二個(gè)SHRINK SPACE操作完成整個(gè)過(guò)程,但是這一次命令不帶COMPAT關(guān)鍵字。
CASCADE – 這個(gè)參數(shù)會(huì)讓分段壓縮操作在對(duì)象的所有獨(dú)立分段上執(zhí)行。例如,壓縮一個(gè)表時(shí)添加CASCADE,就會(huì)在表的所有索引上執(zhí)行分段壓縮操作。
關(guān)于ALTER TABLE、ALTER INDEX、ALTER MATERIALIZED VIEW和ALTER MATERIALIZED VIEW LOG語(yǔ)句和SHRINK SPACE子句的語(yǔ)法和限制,請(qǐng)參見Oracle數(shù)據(jù)庫(kù)SQL語(yǔ)言參考文檔。
總結(jié)
以上是生活随笔為你收集整理的oracle实现分段,用Oracle分段空间管理功能改进数据库性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 美股周一:三大股指均已六连涨,理想汽车涨
- 下一篇: 比亚迪 7000 车汽车运输船首制船在广