<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    一、管理數據塊空間
    ?
    ??? 數據塊的大小是在創建的時候就已經指定的,所以可以進行修改的是數據塊的PCTFREE、PCTUSED參數。
    ?
    ??? 可以進行以下的操作:
    ??? * 改善寫入檢索數據時的性能
    ??? * 減少數據塊中未使用空間的數量
    ??? * 減少數據塊之間行鏈接的數量
    ?
    ??? 1、指定PCTFREE參數
    ?
    ??? PCTFREE參數用于設置為數據塊中需要保留的空閑百分比。例如:
    ?
    ??? pctfree.JPG
    ?
    ??? PCTFREE的默認值是10,可以設置0-99之間的任意數值,只需滿足 PCTFREE + PCTUSED <= 100 即可
    ?
    ??? PCTFREE的參數值設置可以滿足以下條件:
    ?
    ??? ① PCTFREE設置較小的作用:
    ??????? * 為盤區表中現有行的更新保留較少的空間
    ????????* 允許通過插入來更完整得填充數據塊
    ????????* 可以節省空間,因為表或索引的所遇數據存儲在較少數據庫塊中
    ??? ② PCTFREE設置較大的作用:
    ??????? * 為表中現有行的將來更新保留更多的空間
    ??????? * 為同樣數量的插入數據申請更多的數據塊(每個數據塊利用較少)
    ??????? * 提高更新性能(無需頻繁鏈接行片)
    ??? ③ 非簇表的PCTFREE參數
    ??????? 非簇表行中的數據可能會隨時間推移增大則需要多留一些PCTFREE
    ??? ④ 簇表的PCTFREE參數
    ??????? 除了依照非簇表的規則外,達到PCTFREE百分比時,同一簇碼的任何一個表新行進入新塊時均會被鏈接到現有的簇碼
    ??? ⑤ 索引的PCTFREE參數
    ??????? 只能在初始創建索引時才能指定索引的PCTFREE值
    ?
    ??? 2、指定PCTUSED參數
    ?
    ??? 設置PCTUSED參數,當一個數據塊填滿到PCTFREE設置的百分比時,只有在所用空間下降到PTCUSED參數值以下時才繼續為該數據塊插入新行。 例如:
    ?
    ??? pctused.JPG
    ?
    ??? PCTUSED的默認值是40,同樣可以設置為0-99之間的任意數值。
    ?
    ??? PCTUSED的參數值設置可以滿足以下條件:
    ?
    ??? ① PCTUSED設置較小的作用:
    ??????? * 降到PCTUSED以下時,減少在UPDATE和DELETE語句中因數據塊移動到自由列表引起的處理開銷
    ????????* 增加數據庫中的未用空間
    ??? ② PCTUSED設置較大的作用:
    ??????? * 提高空間利用率
    ??????? * INSERT和UPDATE語句中增加處理開銷
    ?
    ??? 3、選擇PCTUSED和PCTFREE的參數值
    ?
    ??? 在設置PCTUSED和PCTFREE參數時,需要注意以下幾點:
    ?
    ??? * PCTFREE和PCTUSED參數之和必須等于或小于100
    ??? * 若兩者和為100,則Oracle只保持PCTFREE參數指定的空閑空間,且處理開銷是最大的
    ??? * 兩者之和與100的差值越小,說明空間利用率越高
    ?
    ??? 下面舉例說明:
    ?
    ??? ① PCTFREE=20 PCTUSED=40
    ?
    ??? 環境:包括增大行大小的UPDATE語句的普通動作。
    ??? 說明:PCTFREE設置為20為UPDATE提供足夠的空間,PCTUSED設置為40以便更新時少做處理,提高性能。
    ?
    ??? ② PCTFREE=5? PCTUSED=60
    ?
    ??? 環境:包含INSERT和DELETE語句,以及不增大行大小的UPDATE。
    ??? 說明:不增大行大小所以PCTFREE比較小,而PCTUSED設為60以便時使DELETE之后的空間馬上可以使用,且減少處理開銷。
    ?
    ??? ③ PCTFREE=5? PCTUSED=40
    ?
    ??? 環境:表非常大且存儲是首要考慮,包含只讀事務的動作。
    ??? 說明:因為是大表,所以設置PCTFREE為5,完全填充每個數據塊。
    ?
    ??? 4、指定事務入口(INITRANS、MAXTRANS)
    ?
    ??? INITRANS參數用于指定DML事務入口的數目,即為事務入口保留空間。
    ??? MAXTRANS參數用于限制一個數據塊中同時使用數據的事務入口數目。
    ?
    ??? INITRANS和MAXTRANS參數的設置需要考慮一下因素:
    ?
    ??? * 為事務入口保留的空間與為數據庫數據保留的空間相比較
    ??? * 任何時候可能訪問同一數據塊的并發事務的數目
    ?
    ??? 例如:
    ?
    ??? ① 一個表非常大,并且只有少數的用戶同時訪問該表,多個并發事務訪問一個數據塊的機會就比較小,因此INITRANS可以設置得小一點,特別是如果數據庫中的空間非常寶貴的情況下。
    ??? ② 一個表通常被很多用戶同時訪問,這時需要INITRANS設置得較大一些來與分配事務的入口,這樣就省去了必須分配事務入口空間的開銷。同事設置一個較大的MAXTRANS參數值,以便沒有用戶為訪問必要數據塊而造成的等待。
    ?
    ?
    二、設置存儲參數
    ?
    ??? 1、確定存儲參數
    ?
    ??? 首先來看一個設定存儲參數的例子:
    ?
    ??? CREATE TABLE players
    ??? (code number(10) primary key,
    ???? lastname VARCHAR2(20),
    ???? firstname VARCHAR2(15),
    ???? position VARCHAR2(20),
    ???? team VARCHAR2(20))
    ??? PCTFREE 10
    ??? PCTUSED 40
    ??? STORAGE
    ??? (INITIAL 25K
    ???? NEXT 10K
    ???? MAXEXTENTS 10
    ???? MINEXTENS 3);
    ?
    ??? 說明:
    ?
    ??? ① INITIAL:創建段時分配的第一個盤區大小。默認為5個數據塊,最小值2個數據塊(字典管理表空間)或3個數據塊(本地管理表空間),最大值由操作系統指定。注意該參數不能在ALTER語句中指定。
    ??? ② NEXT:分配給下一個增加的盤區大小。第二個盤區為NEXT值,再往后NEXT設置為上一個NEXT*(1+PCTINCREASE/100)。該參數默認值為5個數據塊,最小值為1個數據塊,最大值由操作系統指定。
    ??? ③ PCTINCREASE:用于計算NEXT的值,NEXT*(1+PCTINCREASE/100)。默認值為50(%),最小值為0(%),最大值由操作系統指定。
    ??? ④ MINEXTENTS:創建段時分配的盤區總數。允許創建時分配一個大的空間,即使連續空間不夠用。默認值為1(盤區),回滾段為2(盤區),默認值即最小值,最大值沒有限制。
    ??? ⑤?MAXEXTENTS:能夠分配給段的最大盤區總數(包括第一個),默認值取決于數據塊大小和操作系統。最小值為MINEXTENTS的最小值,最大值沒有限制。
    ??? ⑥ FREELIST GROUPS:數據庫對象的空閑表組數。RAC中的實例數將每個實例映射到一個空閑組中。默認值/最小值為1,最大值為RAC的實例數。
    ??? ⑦ FREELISTS:模式對象的每個空閑表組中空閑表的數目,對表空間無效,默認值/最小值為1,最大值取決于數據塊的大小。
    ??? ⑧ OPTIMAL:只與回滾段有關。
    ??? ⑨ BUFFER_POOL:為模式對象定義一個默認的緩沖池,對表空間或回滾段無效。
    ?
    ??? 2、需要設置存儲參數的對象
    ?
    ??? ① 表空間中的段
    ??????? 在創建表空間時使用STORAGE子句進行設置
    ??????? 當表空間層指定MINEXTENTS參數時,該表空間中分配的任何盤區舍入到一個最小盤區的倍數
    ?
    ??? ② 數據段
    ??????? 在使用表、物化視圖、物化視圖日志的CREATE或ALTER語句中的STORAGE子句,可以為非簇表、物化視圖、物化視圖日志數據段配置存儲參數。
    ??????? 使用CREATE CLUSTER或ALTER CLUSTER語句中的STORAGE子句,為簇的數據段設置存儲參數,而不是繼承自表或物化視圖。
    ??????? 分區表的存儲參數繼承自表,若表上沒有指定,則繼承自表空間。
    ?
    ??? ③ 索引段
    ??????? 用CREATE INDEX或ALTER INDEX語句中的STORAGE子句設置
    ?
    ??? ④ LOB、VARRAY、嵌套表
    ?
    ??? 3、修改存儲參數值
    ?
    ??? 可以修改表空間的默認存儲參數和單個段的特定存儲參數。也可以為表空間重置默認參數。
    ??? 注:修改后只影響新創建的對象,或者為段新分配的盤區。
    ?
    ??? 不能為現有的表、簇、索引、回滾段修改INITIAL、MINEXTENTS參數。
    ?
    ??? 如果一個段的NEXT參數修改,則下次增加盤區就是新的NEXT,隨后按以前方式增長。
    ??? 如果一個短的NEXT和PCTINCREASE都被修改,則下一個盤區就是新的NEXT,隨后也以新參數增長。
    ?
    ??? 4、了解存儲參數生效先后次序
    ?
    ??? 對象的層次越低,存儲參數的有效性就越高:
    ?
    ??? ① ALTER [TABLE|CLUSTER|MATERIALIZED VIEW|MATERILIZED VEW LOG|INDEX|ROLLBACK] SEGMENT
    ??? ② CREATE [TABLE|CLUSTER|MATERIALIZED VIEW|MATERILIZED VEW LOG|INDEX|ROLLBACK] SEGMENT
    ??? ③ ALTER TABLESPACE
    ??? ④ CREATE TABLESPACE
    ??? ⑤ Oracle默認值
    ?
    ??? 注:臨時段的存儲參數一般都使用相關的表空間設置的默認存儲參數
    ?
    ??? 5、存儲參數對空間分配的影響
    ?
    ??? 舉例如下:
    ??? ... ...
    ??? STORAGE
    ??? (INITIAL 100K
    ???? NEXT 100K
    ???? MINEXTENTS 2
    ???? MAXEXTENTS 5
    ???? PXTINCREASE 50)
    ?
    ??? 若DB_BLOCK_SIZE為2K,則其盤區的增長情況如下:
    ?
    ??? 盤區號? 盤區大小????????????? NEXT取值
    ??? ------ -------------------? -----------------
    ??? 1????? 50個塊或102400字節??? 50個塊或102400字節
    ??? 2????? 50個塊或102400字節??? 75個塊或153600字節
    ??? 3????? 75個塊或153600字節??? 113個塊或231424字節
    ??? 4????? 115個塊或235520字節?? 170個塊或348160字節
    ??? 5????? 170個塊或348160字節?? 無NEXT,因為MAXEXTENTS=5
    ?
    ?
    三、回收空間
    ?
    ??? 在為段分配了空間之后,如果發現有未使用或過多分配的空間,可以將其釋放以便使用未時空的空間來被其他段使用。
    ?
    ??? 1、觀察高水位標記
    ?
    ??? 使用DBMS_SPACE.UNUSED_SPACE函數查看一個段中未使用空間的數量。
    ?
    ??? 注:低于高水位標記的空間不能被釋放,即使空間中沒有數據。
    ??????? 但是如果段是空的,可以使用TRUNCATE ... DROP STORAGE語句釋放空間
    ?
    ??? 2、發布空間回收語句
    ?
    ??? ALTER TABLE table DEALLACATE UNUSED KEEP integer;
    ??? ALTER INDEX index DEALLOCATE UNUSED KEEP integer;
    ??? ALTER CLUSTER cluster DEALLOCATE UNUSED KEEP integer;
    ?
    ??? 其中KEEP子句是可選的,指定保留不被收回的未使用空間。如果剩下的盤區個數變得比MINEXTENTS參數值小,那么MINEXTENTS就會改變以反應新的個數。如果初始盤區變小,將修改INITIAL參數值以反應初始盤區的新大小。
    ?
    ??? 若沒有指定KEEP子句,則所有高于高水位標記的未使用空間均被回收。MINEXTENTS和初始盤區大小不變。
    ?
    ??? 3、回收空間的例子
    ?
    ??? ① 一個表由3個盤區組成,第一個10K,第二個20K,第三個30K。高水位標記在第二個盤區的中部,且有40K的未使用空間,
    ?????? 則使用ALTER TABLE dquon DEALLOCATE UNUSED;語句后的改變如下:
    ?????? 所有未使用空間被回收,表dquon只剩下兩個盤區,且第二個盤區變成10K。
    ?
    ??? deallocate01.JPG
    ?
    ??? 如果是使用ALTER TABLE dquon DEALLOCATE UNUSED KEEP 10K;語句,則:
    ??? 盤區3被全部收回,但盤區2保持20K不變
    ?
    ??? deallocate02.JPG
    ?
    ??? ② 在①的表盤區3被回收,且盤區2縮減為10K之后,下一個分配的盤區講仍然是30K,而這是我們不希望的。
    ?????? 所以可以手動指定一下下一個盤區的大小:
    ?????? ALTER TABLE dquon STORAGE (NEXT 20K);
    ?
    ??? ③ 如果表dquon有一個參數MINEXTENTS為2,則①中的兩次操作都將沒有變化。
    ?????? 但是如果MINEXTENTS=3,則在①中的第一個例子中,語句將沒有效果。而第二個例子中,會產生同樣效果,但MINEXTENTS修改為2。
    ?




    -The End-

    posted on 2009-02-08 23:51 decode360-3 閱讀(319) 評論(0)  編輯  收藏 所屬分類: DBA
    主站蜘蛛池模板: 亚洲毛片在线免费观看| 三级黄色片免费看| 国产免费久久精品99re丫y| 亚洲AV无码国产精品麻豆天美| 国产免费牲交视频免费播放| 久久精品国产亚洲AV不卡| 一级免费黄色大片| a级亚洲片精品久久久久久久| 中文字幕成人免费高清在线视频| 久久亚洲精品无码播放| 18禁在线无遮挡免费观看网站| 亚洲AV永久无码精品| 久久永久免费人妻精品| 亚洲依依成人精品| 最新中文字幕免费视频| 99视频免费在线观看| 久久夜色精品国产亚洲AV动态图| 午夜精品免费在线观看| 亚洲伊人久久大香线蕉在观| 天天看片天天爽_免费播放| 国产偷国产偷亚洲清高APP| 亚洲免费视频一区二区三区| 中文字幕久精品免费视频| 亚洲一卡二卡三卡四卡无卡麻豆 | 日韩成人精品日本亚洲| 亚洲午夜福利精品久久| 性色午夜视频免费男人的天堂| 色在线亚洲视频www| 国产一区二区三区在线免费| 中国一级特黄高清免费的大片中国一级黄色片 | 精品亚洲视频在线| 国产亚洲精品无码成人| 国产乱子精品免费视观看片| 在线观看亚洲视频| 久久久亚洲精品国产| 女人18毛片水真多免费看| 三上悠亚电影全集免费| 亚洲AV男人的天堂在线观看| 久久久久久A亚洲欧洲AV冫| 色播精品免费小视频| 国产精品免费视频观看拍拍|