日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】

發布時間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PCTFREE、PCTUSED、FREELIST的關系和應用?

概念:

? pctused:一個塊的使用水位的百分比,這個水位將使該塊返回到可用列表中去等待更多的插入操作。
? pctfree:用來為一個塊保留的空間百分比,以防止在今后的更新操作中增加一列或多列值的長度。
? freelist:可用列表是表中的一組可插入數據的可用塊。
? 行連接:指一行存儲在多個塊中的情況,這是因為該行的長度超過了一個塊的可用空間大小,即行鏈接是跨越多塊的行。
? 行遷移:指一個數據行不適合放入當前塊而被重新定位到另一個塊(那里有充足的空間)中,但在原始塊中保留一個指針的情形。原始塊中的指針是必需的,因為索引的ROWID項仍然指向原始位置。

? 計算公式:

? PCTFREE=(Average Row Size-Initial Row Size)*100/Average Row Size
? PCTUSED=(100-PCTFREE) -Average Row Size * 100/Availabe Data Space




設置建議:

  • 除非要嚴格地管理可用空間,否則不要設置pctused超過40或50。
  • 一般這兩個值地和不能達到90,否則會使Oarcle將更多地時間花費在處理空間利用上。下面是幾個參考:
  • pctfree 5,pctused 40 適合于靜態表或只讀表。
  • pctfree 10,pctused 50 適合插入行后,更新活動不會增加已有行地長度地綜合性OLTP系統。
  • pctfree 20,pctused 40 適合于插入行后,更新活動會增加已有行地長度地OLTP系統。
  • 使用情形:
    ??? 1、在ASSM為AUTO的模式下,Oracle根據dba_tables.avg_row_len來調整PCTUSED的大小,如下圖所示
    ?? 2、在ASSM為MANUAL的模式下,oracle根據設置的pctused參數來調整pctused大小
    ?? 使用select * from dba_tables 可以查看表的pctused、pctfree參數的設置大小、以及avg_row_len的大小。


    概念:????
    ?? 1、PCTFREE:塊中保留用于UPDATE操作的空間百分比,當數據占用的空間達到此上限時,新的數據將不能再插入到此塊中;????
    ??? 2、PCTUSED:指定塊中數據使用空間的最低百分比;當一個塊在達到PCTFREE,之后經歷了一些DELETE操作,在其空間使用下降到PCTUSED后便可以重新被用于INSERT數據;這就是PCTFREE/PCTUSED參數的含義;

    ????? 調整PCTFREE、PCTUSED參數的目標一方面是提高性能,另一方面則主要是提高空間使用效率,避免出現塊中存在有許多未用的空間,但卻無法找到一個塊可以被用于插入新數據行的情況發生。

    ???? PCTFREE的使用

    ???? 在Oracle中表的每一行數據由唯一的ROWID標記;而Oracle支持的數據類型中有一些長度是可變的,如VARCHAR,當對這些數據進行 UPDATE時,如果塊中的可用空間不能容納UPDATE后的數據行時,Oracle將會把此行移到其它數據塊,同時保留此數據行的ROWID不變,并在 原有塊中建一指針指向行遷移后的位置。在這種情況下讀取一行數據將需要訪問2個數據塊,從而導致性能下降。PCTFREE保留的空間就是為確保更改后的數 據行可以仍存放于原有數據塊中,避免行遷移的情況發生。 由此,如果PCTFREE設置不足時可能產生行遷移;而另一方面如果PCTFREE設置過高,將會造成空間浪費。因此正確設置PCTFREE需要對表中數 據的使用進行分析。對于數據長度不會變化或極少更新的情況,可以采用較小的PCTFREE;對于其它大多數情況應采用稍大的PCTFREE (PCTFREE的缺省值是10,如果不好估計需預留的空間,可以使用15-25的范圍),不要為節約塊中的空間而使用較小的PCTFREE值。

    ????? PCTUSED的使用

    ?????? 當塊的使用的空間下降到PCTUSED后,此塊被重新放回空閑鏈表(Freelist)中,作為后續Insert的候選塊。同樣,設置PCTUSED需要 視數據行的特性和Insert、Update、Delete的模式而定,但必須遵守的原則是:db_block_size * (100 - PCTFREE - PCTUSED)必須比行的長度大。 對于數據行長度變化較大的情況,應使用最大行長度來計算PCTUSED,并且應使用較低的PCTUSED值。因為在執行Insert時,如果數據塊的可用 空間不能裝下一行數據,當塊的使用的空間是在PCTUSED之上,Oracle將把此塊從Freelist中移走;當塊的使用的空間是在PCTUSED之 下,Oracle將會擴展段空間。因此,PCTUSED如果設得過高,將導致段的不斷擴展。 當數據行長度不大時,使用缺省的PCTUSED(40)是比較合適的;對于行長度較大的情況,最長的行有可能會占用半個以上的塊空間,此時可設置 PCTUSED為10。較小的PCTUSED僅在表中的數據以隨機方式被刪除,而且仍有一些行長時間保留在塊中時,才會造成空間使用上的問題,因為這些塊 可能需要較長的時間才能或永遠不能重新被用于存放新數據。在這種應用中,如果空間利用率一直處于較低水平,則需對PCTUSED進行分析和調整。

    ??? pctfree參數是控制freelist un-links的(即將塊由freelists中移除)。設置pctfree=10 意味著每個塊都保留10%的空間用作行擴展。pctused參數是控制freelist re-links的。設置pctused=40意味著只有在塊的使用低于40%時才會回到表格的freelists中。
    ----------------

    ???? PCTFREE和PCTUSED的概念:PCTFREE存儲參數告訴ORACLE什么時候應該將數據塊從對象的空閑列表中移出。ORACLE的默認參數是 PCTFREE=10;也就是說,一旦一個INSERT操作使得數據塊的90%被使用,這個數據塊就從空閑列表(free list)中移出。 PCTUSED存儲參數告訴ORACLE什么時候將以前滿的數據塊加到空閑列表中。當記錄從數據表中刪除時,數據庫的數據塊就有空間接受新的記錄,但只有 當填充的空間降到PCTUSED值以下時,該數據塊才被連接到空閑列表中,才可以往其中插入數據。PCTUSED的默認值是PCTUSED=40。 (1)PCTUSED較高意味著相對較滿的數據塊會被放置到空閑列表中,從而有效的重復使用數據塊的空間,但會導致I/O消耗。PCTUSED低意味著在 一個數據塊快空的時候才被放置到空閑列表中,數據塊一次能接受很多的記錄,因此可以減少I/O消耗,提高性能。 (2)PCTFREE的值較大意味著數據塊沒有被利用多少就從空閑列表中斷開連接,不利于數據塊的充分使用。PCTFREE過小的結果是,在更新時可能會 出現數據記錄遷移(Migration)的情況。(注:數據記錄遷移(Migration)是指記錄在是UPDATE操作擴展了一個VARCHAR2類型 的列或BLOB列后,PCTFREE參數所指定的空間不夠擴展,從而記錄被ORACLE強制遷移到新的數據塊,發生這種情況將較嚴重的影響ORACLE的 性能,出現更新緩慢)。
    如何設定
    ?????? 在建表或者索引時,指定存儲參數,如
    CREATE TABLE HR.WZHU
    (
    ID???? NUMBER,
    NAME?? VARCHAR2(20 BYTE),
    VALUE VARCHAR2(20 BYTE)
    )
    TABLESPACE USERS
    PCTUSED??? 0
    PCTFREE??? 10
    INITRANS?? 1
    MAXTRANS?? 255
    STORAGE??? (
    ??????????? INITIAL????????? 64K
    ??????????? MINEXTENTS?????? 1
    ??????????? MAXEXTENTS?????? UNLIMITED
    ??????????? PCTINCREASE????? 0
    ??????????? BUFFER_POOL????? DEFAULT
    ?????????? )
    LOGGING
    NOCOMPRESS
    NOCACHE
    NOPARALLEL
    MONITORING;


    CREATE UNIQUE INDEX HR.ID_PRIMARY ON HR.WZHU
    (ID)
    LOGGING
    TABLESPACE USERS
    PCTFREE??? 10
    INITRANS?? 2
    MAXTRANS?? 255
    STORAGE??? (
    ??????????? INITIAL????????? 64K
    ??????????? MINEXTENTS?????? 1
    ??????????? MAXEXTENTS?????? UNLIMITED
    ??????????? PCTINCREASE????? 0
    ??????????? BUFFER_POOL????? DEFAULT
    ?????????? )
    NOPARALLEL;

    總結

    以上是生活随笔為你收集整理的建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。