表存储参数的理解

 

1.      基本表:

CREATE TABLE FMMESPD.C_SN

(

  SN                VARCHAR2(40 BYTE)           NOT NULL,

  LOTNAME           VARCHAR2(40 BYTE)

)

TABLESPACE FMREP_GGDATA

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;

官網鏈接:http://docs.oracle.com/cd/E11882_01/server.112/e17118/clauses009.htm

參數解析:

TABLESPACE:指定表所在的表空間

PCTUSED

ASSM模式(段空間自動管理),該值為0Oracle會根據dba_tables.avg_row_len欄位來調整pctused值的大小,pctused值的意思是當數據塊block內的數據低於多少百分比,才可重新被插入數據(關鍵字used和重新插入),默認值40

MANUAL模式,Oracle根據pctused參數設定pctused的值;

PCTFREE:數據塊block的可用空間百分比(關鍵字free),默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update

關於PCTUSED,PCTFREE的調整:    

pctused表示数据所占最低百分比,如果达到pctfree时不能插入,delete后如果达到pctused才可以用来insert

如果你使用的是自动管理表空间pctused不需要设置

altertable tablename pctfree values;

说明:

pctfree默认是10,主要看更新的数据有多大,可以查看表的max_row_len如果很大又频繁更新可以考虑增加该值。

pctused主要看删除数据的大小,如果很大可以调大该值,如果不是很频繁可以设置小一些30-40pctused+pctfree<90

 可再參考我的上一篇博文《PCTUSEDPCTFREE的理解》

INITRANS MAXTRANS

    表示數據塊可以被多少個事務同時訪問,INITRANS 初始值,MAXTRANS最大值;數據塊可以分成兩部分:數據塊頭和數據塊體。數據塊體存放一條條用戶記錄,每條用戶記錄分成記錄頭和記錄體兩部分。數據塊頭部分有一個ITL的數據結構,叫做事務表,記錄哪些事務修改了這個數據塊,每個事務對應一個事務表項,一個事務表項佔用數據塊頭23字節的存儲空間。Initrans 定義事務表的初始大小,事務表可以動態增加, MAXTRANS 事務表的最大值

STORAGE

   INITIAL 初始區的大小512K,一個數據塊大小默認8K(查看表所在的tablespace blocksize 設置)

   MINEXTENTS  表的最小區數MAXEXTENTS 表的最大區數

   PCTINCREASE 區的增長百分比

    例如使用一个initial盘区为1MBnext盘区为2MBpctincrease50,可得到盘区应该是:(1)1mb(2)2mb(2)3mb(2150)(4)4.5mb(3150%)。一般认为这些参数是过时的,数据库应该使用局部管理并且盘区大小一致的表空间。在这种方式下,initial盘区总是等于next盘区的大小,并且不必使用pctincrease,使用pctincrease只会导致表空间产生碎片。在没用局部管理表空间的情况下,建议总是设置initial=nextpctincrease等于0,这样可以模拟局部管理表空间的使用,为了避免碎片。

   BUFFER_POOL每個數據塊與 database buffer cache 中的數據庫對應,有三個值:default默認緩沖區池, keep保留回收池 ,recycle回收池; buffer pool 設置表的數據塊 讀到內存中,對應放在哪個池中;

   keep缓冲区池

当数据读取到kepp缓冲区池后,会一直保留在内存中,不会被刷出内存,比如整天使用频繁的表,有利的做法是讲其放在keep缓冲池中,以减少IO数量。

keep池的大小由db_keep_cache_size决定,默认值为0

   10g后設置sga_target,自動管理sga 內存。

   LOGGING NOLOGGING:

Nologging對表的某些特定操作不寫入redo log, insert /*+ APPEND*/直接插入,create table as select …可以減少日誌的生成量,加快記錄的插入。但平時表的insert,update,delete 還是會寫入redo log

   NOCOMPRESS COMPRESS

   默認為 nocompress, 是否壓縮表數據,在很小改變的表適用compress,節省空間,提高查詢性能,經常改變的表不要使用壓縮,它會使更新,插入操作變慢

 NOCACHE CACHE

   指定表的數據塊如何存儲在buffer cache中。CACHE,對經常訪問的數據,檢索到該表的數據塊會放在LRU列表的前端,NOCACHE的話,數據塊放在LRU列表的末端,對小表的全表掃描很有用,可以加快小表的全表掃描。

NOPARALLELPARALLEL  n

  指定對表進行DML操作時的并行度


MONITORING
;

        使表處於監控狀態,Oracle跟蹤表的DML操作對表的記錄的影響,9i需要手動添加,10g后自動啟動,目的Oracle 知道表自上一次統計收集信息以來的變化,計算下次該表進行統計收集的時間(超過10%的記錄被修改觸發對該表進行統計)SMON會每隔15分鐘把被監控表的DML變化的statistics寫回數據字典中,也可手動回寫(sysdba權限執行,需要analyze any 的系統權限)

execute DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

查看表的DML修改情況(sys賬號)

Select * from DBA_TAB_MODIFICATIONS  /all_tab_modifications 

其中timestamp 欄位即更新該記錄的時間

          查看 dba_tab_stats_history 視圖看表被統計的歷史記錄,只記錄dbms_stats.gather_table_stats()的歷史記錄,不記錄analyze table 的歷史記錄;
          視圖dba_tab_modifications的信息來源于sys.mon_mods_all$,當參數statistics_level 被設置為typical 或all 時,會默認開啟表監控的特性,Oracle 會監控自上一次統計以后發生的insert,update,delete 以及表是否被truncate 截斷,并將這些操作數量的近似值記錄到數據字典基表sys.MON_MODS$. SMON後台進程會每15分鐘將SGA中的DML統計信息刷新到sys.MON_MODS$中,同時會將sys.MON_MODS$中符合要求的數據MERGE合併到sys.mon_mods_all$,并清空sys.MON_MODS$ 對應的記錄,起到輔助統計信息收集的作用
        參考:http://www.oracledatabase12g.com/archives/smon-flush-dml-statistics-mon-mods.html

2.      分區表:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29564184/viewspace-1168303/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29564184/viewspace-1168303/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值