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