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