oracle 體系結構及內存管理 15_存儲結構

一、Oracle物理存儲結構
    控制文件:ctl 數據庫名字,物理結構信息,字符集,SCN,檢查點,狀態信息,歸檔日誌歷史等,通常會有鏡像
              show parameter control;
    數據文件:dbf 數據和臨時文件百萬行如下小表上億大表
              select * from dba_data_files;
              select * from dba_temp_files;
    聯機日誌文件:redo log 記錄數據庫的改變過程
              select * from v$logfile;
              select * from v$log;
    參數文件:pfile,spfile 啓動時調用,以後一直存在內存,即便損壞了也不影響數據庫運行,重啓會有影響
              show parameter spfile;
    備份文件:參數文件能夠不用每次都備份,DBF,LOG,ARCLOG每次都要備份,數據文件,歸檔日誌的備份不要
              放在存儲上,由於存儲的壽命是4年左右。
    歸檔日誌文件:archived log 離線文件,不要放到存儲上
              select * from V$ARCHIVED_LOG;
    口令文件:可臨時生成,在$ORACLE_HOME/dbs目錄下建立
              orapwd file=orapwipemsdb password=oracle entries=3 force=y 
    告警日誌文件:alert 在ORACLE_BASE/admin/SID/bdump目錄下,記錄數據庫的錯誤及操做過程信息;
    跟蹤日誌文件:trace 在udump目錄下,包含會話對應的spid號的.trc文件
        11g增長了xml格式的日誌文件
        select value from v$diag_info where name='Diag Alert';
        select value from v$diag_info where name='Diag Trace';html

二、邏輯存儲結構
    數據庫、表空間、段(索引段,分區段,臨時段,撤銷段,表段)、區、塊
    select * from v$database; --數據庫實例信息
    select * from dba_users;  --用戶默認信息
    select * from dba_tablespaces;  --表空間信息
    select * from dba_segments;     --段信息,可鏈接表空間,用戶,區等
    select * from dba_extents;      --區信息,可鏈接段等
    show parameter block;           --塊相關信息 數據庫

三、Oracle表空間 dba_tablespaces
    oracle多表空間數據庫,一個表空間,多個數據文件可實現並行讀寫
    普通表空間:users,example
    回滾表空間:undo  undotbs1存儲修改前數據
    臨時表空間:temporary temp臨時存放數據,排序,hash鏈接
    system:數據字典信息,oracle系統信息
    sysaux:system輔助表空間,與system必須同時在線
    狀態:permanent表空間中的數據通常不會改變
          undo
          temporaryoracle

四、Oracle段 dba_segments
    oracle給對象分配空間的單位
    表段、表分區段、索引段、索引分區段、temp 臨時段、undo撤銷段、二進制大對象段
    當分配給多個區後,會給區裏增長塊數
    
五、Oracle區: dba_extents oracle給段分配空間的單位,物理上連續的多個oracle塊,區給段分配空間時開始一個區
默認8個塊,隨着分配區增長,區中的塊也會增多如128個塊。
    高水位線:"high water mark"或HWM,段使用區的最後一個塊的位置,全表掃描的最後一個位置,數據刪了提交
後再分析,高水位線並未下來
    段空間釋放問題,truncate table table_name,後分析表
查詢表的HWM user_tables.blocks
    SELECT blocks, empty_blocks, num_rows  FROM user_tables  WHERE table_name = <tablename>;
        BLOCKS 列表明該表中曾經使用過得數據庫塊的數目,即水線;
        EMPTY_BLOCKS 表明分配給該表,可是在水線以上的數據庫塊。
查詢分配給具體段的塊信息 dba_segments
    SELECT segment_name, segment_type, blocks  FROM dba_segments  WHERE segment_name='BIG_EMP1';
分析表
    ANALYZE TABLE big_emp1 ESTIMATE STATISTICS;
查詢當前對象含有數據的塊數,等同於分析後user_tables.blocks
    SELECT COUNT (DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)|| DBMS_ROWID.ROWID_RELATIVE_FNO(rowid))
    "Used" FROM big_emp1;
修正水位線
    在線轉移表空間,move後記住重建索引。轉移後須要分析才能更新
        ALTER TABLE table_name MOVE;
        alter table BIG_OBJECTS move tablespace EXAMPLE;
    使用Oracle 10g新增功能修正    
        alter table table_name enable row movement;  --設置容許行移動
        alter table table_name shrink space;
    複製要保留的數據到臨時表t,drop原表,而後rename臨時表t爲原表;
    truncate 會降水位線,同時也會減小分配給段的塊數
        TRUNCATE TABLE big_emp1 [REUSE STORAGE] --保留段分配的塊數
            
六、Oracle塊
    塊頭:Oracle塊物理存儲結構:物理地址,屬於哪一個表,事物槽,行目錄
    行目錄:經過行目錄找行,行從下往上使用,行與行之間串起來,行信息矢量,行頭部(鎖信息)列長,列值。
            記錄塊中每一行的起始位置,找到行後逐列找值。應儘量的將一行放入一個塊中,PCTFREE 10%oracle
            每一個塊預留的空間。隨着行目錄和數據行的使用空間會變小。
    行遷移:update後原塊放不下新值,整行數據都被移動,原始的數據塊上僅僅保留的是指向新塊的一個地址信息。
            原先空間的剩餘空間再也不被數據庫使用,這些剩餘的空間咱們將其稱之爲空洞,產生表碎片,發生了行遷
            移的行的rowid 仍是不會變化.
    行鏈接:insert當一行數據太大而不能在一個單數據塊容納時,行連接由此產生,行記錄的大小超出了數據庫
            Oracle塊的大小,DBA_TABLES視圖的CHAINED_CNT列,該列有該表的連接行計數
            SELECT name, value FROM v$sysstat WHERE name = 'table fetch continued row';
    參考資料:
            http://www.2cto.com/database/201410/344139.html
    文件系統塊:dumpe2fs /dev/sda1
    扇區:512字節post

七、區管理方式
    數據字典
    本地(推薦)
        自動
        統一(均可以)
        
八、段管理方式
    手工管理方式
    自動管理方式(推薦)fetch

九、分析表
    analyze table tablename compute statistics;
    analyze table tablename compute statistics for all indexes;
    analyze table tablename delete statistics;
參考資料:
http://www.cnblogs.com/sopost/archive/2011/02/20/2190045.html    spa

十、相關查詢
查詢具體表邏輯存儲信息
    SELECT table_name,NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, CHAIN_CNT, AVG_ROW_LEN 
    FROM USER_TABLES where table_name='T2';
查詢索引列的統計信息,索引的深度(B-Tree的級別),索引葉級的塊數量,集羣因子(clustering_factor), 惟一值的個數。
    SELECT BLEVEL, LEAF_BLOCKS, DISTINCT_KEYS, AVG_LEAF_BLOCKS_PER_KEY, AVG_DATA_BLOCKS_PER_KEY, 
    CLUSTERING_FACTOR  FROM USER_INDEXES;
查詢列的統計信息惟一值個數,列最大小值,密度(選擇率),數據分佈(直方圖信息),NUll值個數
    SELECT NUM_DISTINCT, LOW_VALUE, HIGH_VALUE, DENSITY, NUM_NULLS, NUM_BUCKETS, HISTOGRAM 
    FROM USER_TAB_COLUMNS;    
查詢當前數據庫中邏輯讀最高的10個對象,找熱端
    select *  from (select object_name, statistic_name, value from V$SEGMENT_STATISTICS where 
                    statistic_name = 'logical reads' order by 3 desc)
    where rownum < 11;
相關視圖
    V$TABLESPACE
    V$ENCRYPTED_TABLESPACES
    DBA_TABLESPACES,DBA_ USER_TABLESPACES
    DBA_TABLESPACE_GROUPS
    DBA_SEGMENTS, USER_SEGMENTS
    DBA_EXTENTS, USER_EXTENTS
    DBA_FREE_SPACE, USER_FREE_SPACE
    DBA_TEMP_FREE_SPACE
    V$DATAFILE
    V$TEMPFILE
    DBA_DATA_FILES
    DBA_TEMP_FILES
    V$TEMP_EXTENT_MAP
    V$TEMP_EXTENT_POOL
    V$TEMP_SPACE_HEADER
    DBA_USERS
    DBA_TS_QUOTAS
    V$SORT_SEGMENT
    V$TEMPSEG_USAGE
    V$SEGSTAT_NAME、V$SEGSTAT、V$SEGMENT_STATISTICS
    DBA_TABLES
    DBA_OBJECT_TABLES
    DBA_TAB_STATISTICS
    DBA_TAB_COL_STATISTICS
    DBA_TAB_HISTOGRAMS
    DBA_INDEXES
    DBA_IND_STATISTICS
    DBA_CLUSTERS
    DBA_TAB_PARTITIONS
    DBA_TAB_SUBPARTITIONS
    DBA_IND_PARTITIONS
    DBA_IND_SUBPARTITIONS
    DBA_PART_COL_STATISTICS
    DBA_PART_HISTOGRAMS
    DBA_SUBPART_COL_STATISTICS
    DBA_SUBPART_HISTOGRAMS
    DBA_EXTENTS日誌

相關文章
相關標籤/搜索