《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > Oracle 10g HWM原理及性能優化
Oracle 10g HWM原理及性能優化
來源:微型機與應用2013年第8期
蔡 焰
(廣東韶關學院 圖書館, 廣東 韶關512005)
摘要: HWM(High Water Mark)是表中已經使用過的存儲空間與未使用過的存儲空間之間的分界線,HWM對全表掃描的性能有非常大的影響。當全表掃描時,Oracle會讀取HWM下所有的塊,即使這些塊中有很多是空塊,空塊的存在,也即是表中碎片的存在,必將增加全表掃描額外的物理I/O開銷及CPU開銷,嚴重降低訪問Oracle數據表的性能。通過對Oracle中關于表中HWM的原理及性能優化問題的討論,針對HWM下的碎片問題提出相關的優化策略,并對其空間重組前后進行性能對比測試。
關鍵詞: Oracle HWM 性能優化
Abstract:
Key words :

摘  要: HWM(High Water Mark)是表中已經使用過的存儲空間與未使用過的存儲空間之間的分界線,HWM對全表掃描的性能有非常大的影響。當全表掃描時,Oracle會讀取HWM下所有的塊,即使這些塊中有很多是空塊,空塊的存在,也即是表中碎片的存在,必將增加全表掃描額外的物理I/O開銷及CPU開銷,嚴重降低訪問Oracle數據表的性能。通過對Oracle中關于表中HWM的原理及性能優化問題的討論,針對HWM下的碎片問題提出相關的優化策略,并對其空間重組前后進行性能對比測試。
關鍵詞: Oracle; HWM; 性能優化

    Web2.0與Web3.0的發展都離不開后臺支持數據庫,數據庫運行的好壞、快慢,直接影響到使用者的應用,因而本文將重點研究信息資源建設中后臺數據庫的優化策略。Oracle 數據庫是具有高可靠性、高安全性、高兼容性的大型關系型數據庫,是信息化建設的重要基礎平臺。網絡中的信息資源數據庫具有異構、數據量大、多媒體內容多、查詢頻繁等特點,伴隨網絡不斷深入的應用,其存儲在數據庫中的數據量越來越多,而傳統的數據庫設計方法使得數據庫隨著訪問數據量的增大其性能明顯地降低[1]。Oracle的邏輯空間管理是Oracle管理和優化的重要部分,ASSM段空間自動管理下的HWM問題對Oracle的存儲管理和性能優化有重大影響。本文在探討Oracle 10g邏輯存儲管理的基礎上,針對HWM下的碎片問題提出了相關的優化策略,并對其空間重組前后進行了性能測試。
1 Oracle存儲管理
1.1 Oracle邏輯存儲管理

    Oracle在邏輯存儲上分4個粒度,如圖1所示。

    (1) Block(塊):粒度最小的存儲單位,標準默認大小是8 KB,Oracle每一次I/O操作都是按Block來進行的。
    (2) Extent(區):由一系列相鄰的Block組成,是Oracle空間分配的基本單位[2],Oracle是以Extent為單位進行擴展的。
    (3) Segment(段):由一系列的Extents所組成[2],當創建一個對象時(表或索引),就會分配一個Segment給這個對象。
    (4) Tablespace(表空間):包括Segment、Extent和Block,Tablespace的數據物理上存儲在其所在的數據文件中,一個數據庫最少要有一個Tablespace。
1.2 HWM
    高水標記HWM(High-Water Mark)這個概念在Segment的存儲內容中是比較重要的。簡單來說,HWM代表一個表使用的最大(top limit)塊(如圖2所示),就是一個Segment中已使用和未來使用的Block的分界線[3]。圖2顯示了HWM首先位于新創建表的第一個塊中,隨著數據的插入和更新,使用了越來越多的塊,當現有空間不足而進行空間擴展時HWM會隨之向上移。如果刪除一部分行數據,可能會有許多塊不再包含數據,但HWM不會往下移,被占用的最高空間稱為HWM。

     Oracle在做全表掃描時會讀取HWM下的所有Blocks,即使其中不包含任何數據,Oracle都會一一讀取,這會大大影響系統的性能,特別是當HWM之下的大多數塊都為空時。
     如果一個OLTP系統(即聯機事務處理,就是常說的關系數據庫,對記錄進行增、刪、改、查)應用頻繁地對某個表里的記錄進行DML(Data Manipulation Language)操作(即數據操縱語言,一種命令使用戶能夠查詢數據庫以及操作已有數據庫中的數據的計算機語言),會造成Block中數據分布稀疏,導致HWM下存在大量的碎片,浪費大量的空間。當做全表掃描時,Oracle會讀取HWM之下的所有塊,即使其中不包含數據[3]。對于HWM以下表的碎片,做全表訪問時必然增加一致性讀,因而影響到響應時間,降低系統性能。
2 優化策略
    對于增、刪、改操作比較頻繁的表,尤其是刪除操作比較頻繁的表,一般表的高水位HWM值會偏高,也就是表中數據塊碎片高,雖然ASSM的自動空間管理能提高DML操作并發訪問的性能,但是HWM下高碎片的產生會大大影響訪問效率,而減少碎片、降低對象的HWM可提高對象的訪問效率,從而達到性能優化,大大提高數據的訪問效率。表對象可以通過shrink或move方法實現重組、減少碎片、降低HWM,進行性能優化;索引對象可以提供rebuild的方法來實現重組、減少碎片、降低HWM,進行性能優化。當然,在對表及索引進行shrink或move及rebuild操作時,最好選擇在非業務高峰時進行,避免影響業務的正常運轉。
    shrink與move操作有一些不同,但都可以完成表中碎片的整理,在此可做一些比較:
    (1) move的執行效率比shrink高,因為shrink會產生redo log、undo log;
    (2) shrink對數據的移動是從后往前的,所以shrink不需要使用額外的空閑空間,而move是需要額外空閑空間的;
    (3) 對帶有索引的表進行shrink操作時,索引是不需要重建的;而對帶有索引的表進行move操作時,索引是需要rebuild重建的,否則索引不可用;
    (4) 對表進行shrink操作時,必須打開表的行遷移屬性。
    shrink和move都會對操作的表加表級獨占鎖,因此其他session對此表執行 DML操作時,存在鎖等待;當shrink或move操作執行完成,鎖釋放。
    索引的rebuild是可以在線完成的,比較適合在高可用環境下完成。
    另外,shrink是10g的新特性,僅對ASSM管理表空間有效。
    具體命令操作如下:
    shrink命令:
    Alter table XXX enable row movement(打開表XXX的行遷移屬性);
    Alter table XXX shrink space(僅僅對表XXX進行縮小,不對表中的索引進行空間縮小);
    Alter table XXX shrink space cascade(縮表的同時,也對表中的索引進行縮小);
    Alter table XXX disable row movement(縮表完成后,關閉表XXX的行遷移屬性)。
    move命令:
    Alter table XXX move(對表進行move);
    Alter index YYY rebuild(如果表有索引,則需要對表的索引進行重建)。
3 性能優化測試
    對于碎片較多的表,可以通過shrink或move操作降低表中HWM高水位的值來進行性能優化。下面以shrink命令為例子進行測試。
3.1 對TEST表進行分析
     (1) 表大小
    SQL> select segment_name, bytes/1024/1024 表大小MB from dba_segments where segment_name=′TEST′;
    SEGMENT_NAME           表大小MB
    TEST                                5.632
    (2) 表的實際數據大小:2.439 MB
    SQL>select table_name, AVG_ROW_LEN ,NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024 表實際大小MB,LAST_ANALYZED from dba_tables where table_name=′TEST′;
TABLE_NAME AVG_ROW_LEN NUM_ROWS 表實際大小MB   LAST_ANALYZED
    TEST  157  16290    2.439     2012-12-01 00:13:12
    (3)根據表實際大小公式可得出該表的碎片率為:56.7%
    (1-表實際數據大小/表大小)×100/%=(1-2.439/5.632)×100%=56.7%碎片率:56.7%
    (4)執行SQL語句:select * from test;
    查詢表test中所有記錄,查詢所需時間為2 s。
    SQL的解釋計劃如下:
    Execution Plan
    |Id|Operation |Name |Rows | Cost (%CPU)| Time|
    |0| SELECT STATEMENT |  |   | 141   (0)|    |
    |1| TABLE ACCESS FULL|TEST|16290|141(0)|00:00:02|
    從以上的SQL解釋計劃來看,SQL采用的是全表掃描讀的方式訪問,SQL將讀取表的高水位HWM以下的所有數據塊。
    由上可知: (1)表TEST的大小為5.632 MB, 但實際數據大小約為2.439 MB,碎片率約為56.7%,表TEST中存在大量的碎片; (2)查詢該表所有記錄所需要的時間為2 s。
3.2 碎片重組  優化處理
    通過shrink方式對表TEST作碎片重組實現對表的優化處理。
    SQL> select segment_name, bytes/1024/1024 表大小MB from dba_segments where segment_name=′TEST′;
    segment_name                表大小MB
        TEST                         5.632
    SQL>alter table test enable row movement;
    SQL>alter table test shrink space;
    SQL>alter table test disable row movement;
    SQL>select segment_name,bytes/1024/1024 表大小MB from dba_segments where segment_name=′TEST′;
    SEGMENT_NAME               表大小MB
        TEST                            3.072
    通過對上對TEST表進行優化處理后可以看到:(1) shrink縮表操作后TEST表的大小從5.632 MB縮小到3.072 MB,縮小了近一半,從而降低了表TEST的HWM值; (2)再次執行全表掃描的查詢SQL:select * from test;查詢時間縮短為1 s,SQL執行速度大大提高。
3.3 測試結論
    在對高碎片表進行全表掃描讀的訪問方式時,碎片增加了不必要的物理讀與內存讀,也就增加了不必要的物理I/O與CPU的消耗,最終降低了對表數據的訪問速度,即影響了SQL語句的響應時間。通過shrink或者move操作對表碎片空間進行重組,可以有效降低表中的HWM值,提高表的訪問效率,進而提高block的命中率,在一定程度上,可以起到系統優化的作用。
    本文針對HWM下碎片問題對性能的影響,探討減少碎片空間的優化策略,通過對碎片空間的重組來減少碎片的產生,以提高訪問效率。
    數據庫性能優化是一項復雜的系統工程,是一個循序漸進的過程,應該針對Oracle運行過程中出現的各種問題,找出性能瓶頸,有針對性地對系統進行調整,保證數據庫高效可靠的運行。
參考文獻
[1] 高敬媛, 趙克寶.校園網數據庫性能優化技術[J].煤炭技術,2011,30(07):226-228.
[2] KYTE T, ORACLE E, Signature edition programming techniques and solutions for Oracle 7.3 through 8.1.7 (Expert One-On-One)[M]. New York: Apress,2010.
[3] KYTE T. Expert Oracle database architecture: 9i and 10g  programming techniques and solutions[M]. 2006,San Bernardino: Macsource press,2006.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲国产一区视频| 午夜久久黄色| 国产欧美日韩免费| 国产精品久久激情| 欧美区亚洲区| 欧美日本久久| 欧美日韩精品在线| 欧美久久综合| 欧美日韩日日骚| 欧美日韩亚洲一区二区三区在线| 欧美韩国日本综合| 欧美福利视频在线| 欧美极品在线播放| 欧美日韩福利视频| 欧美日韩一区二区欧美激情| 欧美日韩在线影院| 国产精品wwwwww| 国产精品五月天| 国产区亚洲区欧美区| 日韩视频专区| 欧美专区日韩专区| 午夜一区二区三视频在线观看| 亚洲在线电影| 性做久久久久久久久| 久久成人综合视频| 亚洲国产乱码最新视频| 亚洲国产天堂久久综合| 亚洲九九精品| 在线视频精品一| 亚洲欧美日韩中文视频| 欧美制服丝袜第一页| 久久全国免费视频| 欧美国内亚洲| 国产精品久久久久久久久久ktv| 国产乱码精品一区二区三区av| 国产午夜精品视频| 一色屋精品视频在线观看网站| 亚洲欧洲精品天堂一级| 一个人看的www久久| 西西裸体人体做爰大胆久久久| 久久精品二区三区| 亚洲毛片在线观看.| 亚洲欧美国产精品桃花| 久久久久国产精品午夜一区| 欧美高清你懂得| 国产精品久久久久久亚洲调教| 国产在线精品二区| 亚洲黄色一区二区三区| 夜夜嗨av一区二区三区免费区| 亚洲欧美日韩精品久久亚洲区| 亚洲国产精品va在看黑人| 一卡二卡3卡四卡高清精品视频| 亚洲欧美一区二区三区久久| 久久亚洲精品中文字幕冲田杏梨| 欧美极品影院| 国产欧美午夜| 亚洲日本aⅴ片在线观看香蕉| 亚洲在线一区二区三区| 亚洲激情视频在线| 亚洲综合色在线| 免费在线观看日韩欧美| 国产精品电影网站| 在线观看视频一区| 亚洲视频在线观看三级| 亚洲国产婷婷综合在线精品 | 性高湖久久久久久久久| 亚洲欧洲一区二区三区在线观看 | 男女精品网站| 国产精品制服诱惑| 亚洲日本成人| 久久国产乱子精品免费女| 亚洲一级影院| 欧美成人综合在线| 欧美日本免费一区二区三区| 欧美一区二区三区四区在线| 欧美精品久久天天躁| 国产欧美一区二区三区在线老狼| 亚洲人成亚洲人成在线观看| 欧美一区二区日韩| 亚洲网站在线| 欧美成人在线免费视频| 国产一区二区精品在线观看| 夜夜嗨网站十八久久| 亚洲国产小视频在线观看| 欧美专区中文字幕| 国产精品久久福利| 日韩亚洲在线观看| 亚洲黄网站在线观看| 欧美主播一区二区三区| 国产精品久久久久久av下载红粉 | 亚洲日本在线视频观看| 久久久精品国产免大香伊| 国产精品久久久久久久久久久久久久| 亚洲国产你懂的| 亚洲第一页中文字幕| 久久精品欧美日韩精品| 国产精品每日更新| av成人免费观看| 一本一本久久| 欧美理论片在线观看| 在线日韩中文| 久久成人免费网| 久久精品1区| 国产精品日韩精品欧美在线| 一区二区电影免费观看| 9久re热视频在线精品| 欧美成人午夜免费视在线看片| 黑丝一区二区三区| 欧美一区二区成人6969| 欧美一区二区三区成人| 国产精品乱码| 亚洲一区二区三区免费观看| 亚洲综合精品| 国产精品久久77777| 亚洲视频axxx| 亚洲欧美日本视频在线观看| 国产精品ⅴa在线观看h| 一本色道久久综合亚洲精品不| 在线中文字幕日韩| 欧美日韩国产探花| 欧美在线免费看| 国产欧美日韩亚洲精品| 中文av字幕一区| 亚洲网站视频福利| 国产精品极品美女粉嫩高清在线 | 亚洲一区二区三区中文字幕在线 | 亚洲色图自拍| 亚洲欧美日韩国产中文 | 国产精品久久久久永久免费观看 | 日韩视频在线观看国产| 欧美国产综合一区二区| 亚洲三级视频| 亚洲特级毛片| 国产精品久久二区| 午夜日韩视频| 久久久久成人精品| 在线播放中文一区| 日韩视频在线一区二区三区| 欧美日韩在线播放一区| 亚洲一区二区视频| 久久精品伊人| 一区二区三区在线视频播放| 亚洲精品一区二区三区四区高清| 欧美日韩国产精品一区二区亚洲| 一区二区日韩精品| 欧美一区二区视频在线| 国产一区二区三区在线观看精品| 91久久久国产精品| 欧美视频一区二区三区…| 亚洲欧美日韩精品久久亚洲区| 久久久亚洲精品一区二区三区| 在线观看欧美成人| 一本色道久久99精品综合| 国产精品国产三级国产普通话蜜臀| 亚洲欧美日韩视频二区| 久久乐国产精品| 欧美一区二区啪啪| 在线看一区二区| 久久精品国产一区二区电影| 欧美极品在线观看| 亚洲午夜久久久| 久久人人97超碰国产公开结果| 亚洲国产老妈| 亚洲欧美激情一区二区| 狠狠久久综合婷婷不卡| 一区二区欧美在线| 国产一区日韩一区| 一区二区免费在线播放| 国产亚洲精品久久飘花| 日韩小视频在线观看专区| 国产精品日产欧美久久久久| 久久精品一区二区三区不卡| 欧美日韩精选| 久久精品夜色噜噜亚洲a∨| 欧美日韩国产成人在线免费| 欧美一级二区| 欧美日韩一区在线播放| 久久精品一区| 国产精品v日韩精品| 亚洲国产精品嫩草影院| 国产精品视频久久久| 亚洲精品久久在线| 国产日韩精品一区二区三区在线| 亚洲精品影院在线观看| 国产亚洲福利一区| 一区二区三区四区五区精品视频 | 亚洲精品久久久蜜桃| 久久成人在线| av成人老司机| 欧美成人性生活| 欧美在线啊v| 国产精品国产三级国产普通话三级| 91久久夜色精品国产网站| 国产日韩在线亚洲字幕中文| 一区二区三区精品视频| 激情综合自拍| 久久福利毛片| 亚洲一区久久久| 欧美三级在线播放| 91久久综合|