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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    對象的空間管理
    ?
    ??? 這個(gè)名字是照著書上取的,其實(shí)有些歧義。這一篇其實(shí)學(xué)習(xí)的是Oracle對象的存儲空間屬性設(shè)置,不過還是尊重書上的吧。這一塊東西說重要也重要,說不重要也不重要。你不去管它完全都照著Oracle的默認(rèn)設(shè)置,應(yīng)該也影響不了多少性能,但是對于大數(shù)據(jù)量的數(shù)據(jù)庫,就需要考慮這方面的性能問題了,所以這也算是DBA必須掌握的只是之一,看一下:
    ?
    一、管理數(shù)據(jù)塊空間
    ?
    ??? 數(shù)據(jù)塊的大小是在創(chuàng)建的時(shí)候就已經(jīng)指定的,所以可以進(jìn)行修改的是數(shù)據(jù)塊的PCTFREE、PCTUSED參數(shù)。
    ?
    ??? 可以進(jìn)行以下的操作:
    ??? * 改善寫入檢索數(shù)據(jù)時(shí)的性能
    ??? * 減少數(shù)據(jù)塊中未使用空間的數(shù)量
    ??? * 減少數(shù)據(jù)塊之間行鏈接的數(shù)量
    ?
    ??? 1、指定PCTFREE參數(shù)
    ?
    ??? PCTFREE參數(shù)用于設(shè)置為數(shù)據(jù)塊中需要保留的空閑百分比。例如:
    ?
    ??? Obj_Space_01
    ?
    ??? PCTFREE的默認(rèn)值是10,可以設(shè)置0-99之間的任意數(shù)值,只需滿足 PCTFREE + PCTUSED <= 100 即可
    ?
    ??? PCTFREE的參數(shù)值設(shè)置可以滿足以下條件:
    ?
    ??? ① PCTFREE設(shè)置較小的作用:
    ??????? * 為盤區(qū)表中現(xiàn)有行的更新保留較少的空間
    ??????? * 允許通過插入來更完整得填充數(shù)據(jù)塊
    ??????? * 可以節(jié)省空間,因?yàn)楸砘蛩饕乃鰯?shù)據(jù)存儲在較少數(shù)據(jù)庫塊中
    ??? ② PCTFREE設(shè)置較大的作用:
    ??????? * 為表中現(xiàn)有行的將來更新保留更多的空間
    ??????? * 為同樣數(shù)量的插入數(shù)據(jù)申請更多的數(shù)據(jù)塊(每個(gè)數(shù)據(jù)塊利用較少)
    ??????? * 提高更新性能(無需頻繁鏈接行片)
    ??? ③ 非簇表的PCTFREE參數(shù)
    ??????? 非簇表行中的數(shù)據(jù)可能會隨時(shí)間推移增大則需要多留一些PCTFREE
    ??? ④ 簇表的PCTFREE參數(shù)
    ??????? 除了依照非簇表的規(guī)則外,達(dá)到PCTFREE百分比時(shí),同一簇碼的任何一個(gè)表新行進(jìn)入新塊時(shí)均會被鏈接到現(xiàn)有的簇碼
    ??? ⑤ 索引的PCTFREE參數(shù)
    ??????? 只能在初始創(chuàng)建索引時(shí)才能指定索引的PCTFREE值
    ?
    ??? 2、指定PCTUSED參數(shù)
    ?
    ??? 設(shè)置PCTUSED參數(shù),當(dāng)一個(gè)數(shù)據(jù)塊填滿到PCTFREE設(shè)置的百分比時(shí),只有在所用空間下降到PTCUSED參數(shù)值以下時(shí)才繼續(xù)為該數(shù)據(jù)塊插入新行。 例如:
    ?
    ??? Obj_Space_02
    ?
    ??? PCTUSED的默認(rèn)值是40,同樣可以設(shè)置為0-99之間的任意數(shù)值。
    ?
    ??? PCTUSED的參數(shù)值設(shè)置可以滿足以下條件:
    ?
    ??? ① PCTUSED設(shè)置較小的作用:
    ??????? * 降到PCTUSED以下時(shí),減少在UPDATE和DELETE語句中因數(shù)據(jù)塊移動到自由列表引起的處理開銷
    ??????? * 增加數(shù)據(jù)庫中的未用空間
    ??? ② PCTUSED設(shè)置較大的作用:
    ??????? * 提高空間利用率
    ??????? * INSERT和UPDATE語句中增加處理開銷
    ?
    ??? 3、選擇PCTUSED和PCTFREE的參數(shù)值
    ?
    ??? 在設(shè)置PCTUSED和PCTFREE參數(shù)時(shí),需要注意以下幾點(diǎn):
    ?
    ??? * PCTFREE和PCTUSED參數(shù)之和必須等于或小于100
    ??? * 若兩者和為100,則Oracle只保持PCTFREE參數(shù)指定的空閑空間,且處理開銷是最大的
    ??? * 兩者之和與100的差值越小,說明空間利用率越高
    ?
    ??? 下面舉例說明:
    ?
    ??? ① PCTFREE=20 PCTUSED=40
    ?
    ??? 環(huán)境:包括增大行大小的UPDATE語句的普通動作。
    ??? 說明:PCTFREE設(shè)置為20為UPDATE提供足夠的空間,PCTUSED設(shè)置為40以便更新時(shí)少做處理,提高性能。
    ?
    ??? ② PCTFREE=5? PCTUSED=60
    ?
    ??? 環(huán)境:包含INSERT和DELETE語句,以及不增大行大小的UPDATE。
    ??? 說明:不增大行大小所以PCTFREE比較小,而PCTUSED設(shè)為60以便時(shí)使DELETE之后的空間馬上可以使用,且減少處理開銷。
    ?
    ??? ③ PCTFREE=5? PCTUSED=40
    ?
    ??? 環(huán)境:表非常大且存儲是首要考慮,包含只讀事務(wù)的動作。
    ??? 說明:因?yàn)槭谴蟊恚栽O(shè)置PCTFREE為5,完全填充每個(gè)數(shù)據(jù)塊。
    ?
    ??? 4、指定事務(wù)入口(INITRANS、MAXTRANS)
    ?
    ??? INITRANS參數(shù)用于指定DML事務(wù)入口的數(shù)目,即為事務(wù)入口保留空間。
    ??? MAXTRANS參數(shù)用于限制一個(gè)數(shù)據(jù)塊中同時(shí)使用數(shù)據(jù)的事務(wù)入口數(shù)目。
    ?
    ??? INITRANS和MAXTRANS參數(shù)的設(shè)置需要考慮一下因素:
    ?
    ??? * 為事務(wù)入口保留的空間與為數(shù)據(jù)庫數(shù)據(jù)保留的空間相比較
    ??? * 任何時(shí)候可能訪問同一數(shù)據(jù)塊的并發(fā)事務(wù)的數(shù)目
    ?
    ??? 例如:
    ?
    ??? ① 一個(gè)表非常大,并且只有少數(shù)的用戶同時(shí)訪問該表,多個(gè)并發(fā)事務(wù)訪問一個(gè)數(shù)據(jù)塊的機(jī)會就比較小,因此INITRANS可以設(shè)置得小一點(diǎn),特別是如果數(shù)據(jù)庫中的空間非常寶貴的情況下。
    ??? ② 一個(gè)表通常被很多用戶同時(shí)訪問,這時(shí)需要INITRANS設(shè)置得較大一些來與分配事務(wù)的入口,這樣就省去了必須分配事務(wù)入口空間的開銷。同事設(shè)置一個(gè)較大的MAXTRANS參數(shù)值,以便沒有用戶為訪問必要數(shù)據(jù)塊而造成的等待。
    ?
    ?
    二、設(shè)置存儲參數(shù)
    ?
    ??? 1、確定存儲參數(shù)
    ?
    ??? 首先來看一個(gè)設(shè)定存儲參數(shù)的例子:
    ?
    ??? 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:創(chuàng)建段時(shí)分配的第一個(gè)盤區(qū)大小。默認(rèn)為5個(gè)數(shù)據(jù)塊,最小值2個(gè)數(shù)據(jù)塊(字典管理表空間)或3個(gè)數(shù)據(jù)塊(本地管理表空間),最大值由操作系統(tǒng)指定。注意該參數(shù)不能在ALTER語句中指定。
    ??? ② NEXT:分配給下一個(gè)增加的盤區(qū)大小。第二個(gè)盤區(qū)為NEXT值,再往后NEXT設(shè)置為上一個(gè)NEXT*(1+PCTINCREASE/100)。該參數(shù)默認(rèn)值為5個(gè)數(shù)據(jù)塊,最小值為1個(gè)數(shù)據(jù)塊,最大值由操作系統(tǒng)指定。
    ??? ③ PCTINCREASE:用于計(jì)算NEXT的值,NEXT*(1+PCTINCREASE/100)。默認(rèn)值為50(%),最小值為0(%),最大值由操作系統(tǒng)指定。
    ??? ④ MINEXTENTS:創(chuàng)建段時(shí)分配的盤區(qū)總數(shù)。允許創(chuàng)建時(shí)分配一個(gè)大的空間,即使連續(xù)空間不夠用。默認(rèn)值為1(盤區(qū)),回滾段為2(盤區(qū)),默認(rèn)值即最小值,最大值沒有限制。
    ??? ⑤ MAXEXTENTS:能夠分配給段的最大盤區(qū)總數(shù)(包括第一個(gè)),默認(rèn)值取決于數(shù)據(jù)塊大小和操作系統(tǒng)。最小值為MINEXTENTS的最小值,最大值沒有限制。
    ??? ⑥ FREELIST GROUPS:數(shù)據(jù)庫對象的空閑表組數(shù)。RAC中的實(shí)例數(shù)將每個(gè)實(shí)例映射到一個(gè)空閑組中。默認(rèn)值/最小值為1,最大值為RAC的實(shí)例數(shù)。
    ??? ⑦ FREELISTS:模式對象的每個(gè)空閑表組中空閑表的數(shù)目,對表空間無效,默認(rèn)值/最小值為1,最大值取決于數(shù)據(jù)塊的大小。
    ??? ⑧ OPTIMAL:只與回滾段有關(guān)。
    ??? ⑨ BUFFER_POOL:為模式對象定義一個(gè)默認(rèn)的緩沖池,對表空間或回滾段無效。
    ?
    ??? 2、需要設(shè)置存儲參數(shù)的對象
    ?
    ??? ① 表空間中的段
    ??????? 在創(chuàng)建表空間時(shí)使用STORAGE子句進(jìn)行設(shè)置
    ??????? 當(dāng)表空間層指定MINEXTENTS參數(shù)時(shí),該表空間中分配的任何盤區(qū)舍入到一個(gè)最小盤區(qū)的倍數(shù)
    ?
    ??? ② 數(shù)據(jù)段
    ??????? 在使用表、物化視圖、物化視圖日志的CREATE或ALTER語句中的STORAGE子句,可以為非簇表、物化視圖、物化視圖日志數(shù)據(jù)段配置存儲參數(shù)。
    ??????? 使用CREATE CLUSTER或ALTER CLUSTER語句中的STORAGE子句,為簇的數(shù)據(jù)段設(shè)置存儲參數(shù),而不是繼承自表或物化視圖。
    ??????? 分區(qū)表的存儲參數(shù)繼承自表,若表上沒有指定,則繼承自表空間。
    ?
    ??? ③ 索引段
    ??????? 用CREATE INDEX或ALTER INDEX語句中的STORAGE子句設(shè)置
    ?
    ??? ④ LOB、VARRAY、嵌套表
    ?
    ??? 3、修改存儲參數(shù)值
    ?
    ??? 可以修改表空間的默認(rèn)存儲參數(shù)和單個(gè)段的特定存儲參數(shù)。也可以為表空間重置默認(rèn)參數(shù)。
    ??? 注:修改后只影響新創(chuàng)建的對象,或者為段新分配的盤區(qū)。
    ?
    ??? 不能為現(xiàn)有的表、簇、索引、回滾段修改INITIAL、MINEXTENTS參數(shù)。
    ?
    ??? 如果一個(gè)段的NEXT參數(shù)修改,則下次增加盤區(qū)就是新的NEXT,隨后按以前方式增長。
    ??? 如果一個(gè)短的NEXT和PCTINCREASE都被修改,則下一個(gè)盤區(qū)就是新的NEXT,隨后也以新參數(shù)增長。
    ?
    ??? 4、了解存儲參數(shù)生效先后次序
    ?
    ??? 對象的層次越低,存儲參數(shù)的有效性就越高:
    ?
    ??? ① 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默認(rèn)值
    ?
    ??? 注:臨時(shí)段的存儲參數(shù)一般都使用相關(guān)的表空間設(shè)置的默認(rèn)存儲參數(shù)
    ?
    ??? 5、存儲參數(shù)對空間分配的影響
    ?
    ??? 舉例如下:
    ??? ... ...
    ??? STORAGE
    ??? (INITIAL 100K
    ???? NEXT 100K
    ???? MINEXTENTS 2
    ???? MAXEXTENTS 5
    ???? PXTINCREASE 50)
    ?
    ??? 若DB_BLOCK_SIZE為2K,則其盤區(qū)的增長情況如下:
    ?
    ??? 盤區(qū)號? 盤區(qū)大小????????????? NEXT取值
    ??? ------ -------------------? -----------------
    ??? 1????? 50個(gè)塊或102400字節(jié)??? 50個(gè)塊或102400字節(jié)
    ??? 2????? 50個(gè)塊或102400字節(jié)??? 75個(gè)塊或153600字節(jié)
    ??? 3????? 75個(gè)塊或153600字節(jié)??? 113個(gè)塊或231424字節(jié)
    ??? 4????? 115個(gè)塊或235520字節(jié)?? 170個(gè)塊或348160字節(jié)
    ??? 5????? 170個(gè)塊或348160字節(jié)?? 無NEXT,因?yàn)镸AXEXTENTS=5
    ?
    ?
    三、回收空間
    ?
    ??? 在為段分配了空間之后,如果發(fā)現(xiàn)有未使用或過多分配的空間,可以將其釋放以便使用未時(shí)空的空間來被其他段使用。
    ?
    ??? 1、觀察高水位標(biāo)記
    ?
    ??? 使用DBMS_SPACE.UNUSED_SPACE函數(shù)查看一個(gè)段中未使用空間的數(shù)量。
    ?
    ??? 注:低于高水位標(biāo)記的空間不能被釋放,即使空間中沒有數(shù)據(jù)。
    ??????? 但是如果段是空的,可以使用TRUNCATE ... DROP STORAGE語句釋放空間
    ?
    ??? 2、發(fā)布空間回收語句
    ?
    ??? ALTER TABLE table DEALLACATE UNUSED KEEP integer;
    ??? ALTER INDEX index DEALLOCATE UNUSED KEEP integer;
    ??? ALTER CLUSTER cluster DEALLOCATE UNUSED KEEP integer;
    ?
    ??? 其中KEEP子句是可選的,指定保留不被收回的未使用空間。如果剩下的盤區(qū)個(gè)數(shù)變得比MINEXTENTS參數(shù)值小,那么MINEXTENTS就會改變以反應(yīng)新的個(gè)數(shù)。如果初始盤區(qū)變小,將修改INITIAL參數(shù)值以反應(yīng)初始盤區(qū)的新大小。
    ?
    ??? 若沒有指定KEEP子句,則所有高于高水位標(biāo)記的未使用空間均被回收。MINEXTENTS和初始盤區(qū)大小不變。
    ?
    ??? 3、回收空間的例子
    ?
    ??? ① 一個(gè)表由3個(gè)盤區(qū)組成,第一個(gè)10K,第二個(gè)20K,第三個(gè)30K。高水位標(biāo)記在第二個(gè)盤區(qū)的中部,且有40K的未使用空間,
    ?????? 則使用ALTER TABLE dquon DEALLOCATE UNUSED;語句后的改變?nèi)缦拢?/font>
    ?????? 所有未使用空間被回收,表dquon只剩下兩個(gè)盤區(qū),且第二個(gè)盤區(qū)變成10K。
    ?
    ??? Obj_Space_03
    ?
    ??? 如果是使用ALTER TABLE dquon DEALLOCATE UNUSED KEEP 10K;語句,則:
    ??? 盤區(qū)3被全部收回,但盤區(qū)2保持20K不變
    ?
    ??? Obj_Space_04
    ?
    ??? ② 在①的表盤區(qū)3被回收,且盤區(qū)2縮減為10K之后,下一個(gè)分配的盤區(qū)講仍然是30K,而這是我們不希望的。
    ?????? 所以可以手動指定一下下一個(gè)盤區(qū)的大小:
    ?????? ALTER TABLE dquon STORAGE (NEXT 20K);
    ?
    ??? ③ 如果表dquon有一個(gè)參數(shù)MINEXTENTS為2,則①中的兩次操作都將沒有變化。
    ?????? 但是如果MINEXTENTS=3,則在①中的第一個(gè)例子中,語句將沒有效果。而第二個(gè)例子中,會產(chǎn)生同樣效果,但MINEXTENTS修改為2。
    ?
    posted on 2009-02-08 23:51 decode360 閱讀(150) 評論(0)  編輯  收藏 所屬分類: 08.DBA
    主站蜘蛛池模板: 老外毛片免费视频播放| 国产精品四虎在线观看免费| 美女扒开尿口给男人爽免费视频| 久久亚洲精品无码AV红樱桃| 亚洲中文字幕伊人久久无码| 免费被黄网站在观看| 日本片免费观看一区二区| 久久久免费观成人影院| 国内成人精品亚洲日本语音| 67194成是人免费无码| 久久免费观看国产精品| 国产免费高清69式视频在线观看| 亚洲中文字幕久久精品无码A| 亚洲精品无码久久久久久久| 永久免费观看的毛片的网站| 69式国产真人免费视频| 亚洲毛片免费视频| 99视频在线免费| 久久久久国产精品免费看| 中文字幕版免费电影网站| 伊人久久国产免费观看视频| 国产亚洲精品免费| 美女视频黄a视频全免费网站色| 最新亚洲精品国偷自产在线| 亚洲一区免费视频| 中文字幕第13亚洲另类| 四虎精品亚洲一区二区三区| 国产禁女女网站免费看| 永久免费无码网站在线观看| 国产美女精品久久久久久久免费| 热久久精品免费视频| 免费永久在线观看黄网站| 免费人成网站7777视频| 亚洲国模精品一区| 国产精品亚洲综合一区| 国产亚洲视频在线播放| 亚洲成AV人在线观看天堂无码| 亚洲av永久无码精品漫画| 亚洲午夜在线电影| 亚洲噜噜噜噜噜影院在线播放| 亚洲av午夜精品无码专区|