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

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

保持Oracle數(shù)據(jù)庫優(yōu)良性能的若干訣竅

2024-08-29 13:32:06
字體:
供稿:網(wǎng)友
  • 本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 如今,oracle數(shù)據(jù)庫以其高可靠性、安全性、可兼容性,得到越來越多的企業(yè)的青睞。如何使oracle數(shù)據(jù)庫保持永久的優(yōu)良性能,讀者不妨針對以下若干方面加以考慮。

    分區(qū)
    根據(jù)實際經(jīng)驗所得,在一個大數(shù)據(jù)庫中,數(shù)據(jù)庫空間的絕大多數(shù)是被少量的表所占有。如何簡化大數(shù)據(jù)庫和管理,如何改善應(yīng)用的查詢性能,一般可以使用分區(qū)這種手段。所謂分區(qū)就是動態(tài)地將表中記錄分離到若干不同的表空間上,使數(shù)據(jù)在物理上被分割開來,便于維護、備份、恢復(fù)、事務(wù)及查詢性能。當使用的時候可建立一個連接所有分區(qū)的視圖,使其在邏輯上仍以一個整體出現(xiàn)。
    1、建立分區(qū)表
    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依據(jù)deptno列進行分區(qū)。
    2、分區(qū)索引
    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,
    );
    當分區(qū)中出現(xiàn)許多事務(wù)并且要保證所有分區(qū)中的數(shù)據(jù)記錄的唯一性時采用全局索引,如:
    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子句允許指定索引的范圍值,這個范圍值可以不同于表分區(qū)的范圍值。只有建立局部索引才會使索引索引分區(qū)與表分區(qū)間建立起一一對應(yīng)關(guān)系。因此,在大多數(shù)情況下,應(yīng)該使用局部索引分區(qū)。若使用了此索引,分區(qū)就能夠很容易地將索引分區(qū)與表分區(qū)建立關(guān)聯(lián),局部索引比全局索引更易于管理。
    3、分區(qū)管理
    根據(jù)實際需要,還可以使用 alter table 命令來增加、丟棄、交換、移動、修改、重命名、劃分、截短一個已存在分區(qū)的結(jié)構(gòu)。

    rebuild indexes
    如果表中記錄頻繁的被刪除或插入,盡管表中的記錄總量保持不變,索引空間的使用量會不斷增加。雖然記錄從索引中被刪除,但是該記錄索引項的使用空間不能被重新使用。因此,如果表變化不定,索引空間量會不斷增加,不管表中記錄數(shù)量是否增加——只僅僅是因為索引中無效空間量的增加。
    要回收那些曾被刪除記錄使用的空間,需要使用alter index rebuild 命令。可以做一個定期運行的批處理程序,來重建最活動表的索引。這個批處理程序可以在空閑時運行,以避免程序與用戶沖突。若能堅持索引的這一程序規(guī)劃,便可以及時回收那些未使用空間,提高空間利用率。

    段的碎片整理
    當生成一個數(shù)據(jù)庫對象時(一個表或一個索引),通過用戶缺省值或指定值來為它指定表空間。一個在表空間中所生成的段,用于存儲對象的相關(guān)數(shù)據(jù)。在段被關(guān)閉、收縮、截斷之前,段所分配的空間將不被釋放。
    一個段是由范圍組成,而范圍是由相鄰的oracle塊組成。一旦存在的范圍不能再存儲新的數(shù)據(jù),那這個段就會去獲得新的范圍,且并不要求這些范圍是彼此相鄰的。這樣的擴展會一直繼續(xù)下去,直到表空間中的數(shù)據(jù)文件不能提供更多的自由空間,或者范圍數(shù)量已達到極限。
    因此,一個碎片太多的數(shù)據(jù)段,不僅會影響運行,也會引發(fā)表空間中的空間管理問題。所以,每個數(shù)據(jù)段只含有一個范圍是十分有益的。借助監(jiān)控系統(tǒng),可以通過檢查dba_segments數(shù)據(jù)字典視圖來了解哪些數(shù)據(jù)庫對象含有10個或更多范圍的段,確定其數(shù)據(jù)段碎片。
    若一個段的碎片過多,可用兩種方法解決這個問題:
    1、用正確的存儲參數(shù)建立一個新表,將舊表中的數(shù)據(jù)插入到新表中,再刪除舊表;
    2、利用export/import工具。
    如:exp system/manager file=exp.dmp compress=y grants=y indexes=y
    tables=(t1,t2)
    若輸出成功,進入oracle,刪除上述表。
    注:compress=y決定將在輸出過程中修改它們的存儲參數(shù)。
    imp system/manager file=exp.dmp commit=y buffer=64000 full=y
    注:在輸入時重新配置新的存儲參數(shù)。

    自由范圍的碎片整理
    表空間中的一個自由范圍是表空間中相連自由(空間)塊的集合。當一個段關(guān)閉時,它的范圍將被釋放,并被標記為自由范圍。然而,這些自由范圍再也不能與相鄰的自由范圍合并,它們之間的界線始終存在。但是當表空間的缺省值pctincrease設(shè)置不為0時,smon后臺進會定期的將這些相鄰的自由范圍合并。若pctincrease設(shè)置為0,那相鄰自由范圍不會被數(shù)據(jù)庫自動合并。但可以使用altertable命令coalesce選項,來強迫進行相鄰自由范圍的合并。
    不進行自由范圍合并,在日后的空間請求中,會影響到表空間中的空間分配。當需要一個足夠大的范圍時,數(shù)據(jù)庫并不會合并相鄰的自由范圍,除非沒有其他選擇。這樣,當表空間中前面較小自由范圍已被相關(guān)使用時,將使用表空間中后面部分最大的一個自由范圍。結(jié)果,會因為它們沒有足夠多的使用空間,從而導(dǎo)致表空間中速度上的矛盾。由于這樣的進程出現(xiàn),使數(shù)據(jù)庫的空間分配距理想越來越遠。自由空間碎片常會出現(xiàn)在那些經(jīng)常關(guān)閉又重新生成的數(shù)據(jù)庫表和索引中。
    在理想的oracle表空間中,每一個數(shù)據(jù)庫對象存儲在一個單獨的范圍中,并且所有有效自由空間集中在一個巨大而連續(xù)的范圍中。這樣,在一個對象需要附加存儲空間時,可以在增加獲取足夠大自由空間的可能性同時,最小化空間中的循環(huán)調(diào)用,提高自由空間使用率。
    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 克山县| 左云县| 阜新| 莫力| 盐池县| 逊克县| 金平| 鸡东县| 马龙县| 中牟县| 舟曲县| 长岭县| 茂名市| 正阳县| 南召县| 高青县| 阳城县| 牟定县| 改则县| 石门县| 新绛县| 阳山县| 西宁市| 通州市| 高要市| 莱州市| 盐城市| 五寨县| 延川县| 津市市| SHOW| 富源县| 明光市| 龙海市| 苍山县| 庆云县| 乐安县| 白银市| 涡阳县| 栾城县| 海阳市|