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日志

相关文章
相关标签/搜索