Oracle統計信息


Oracle統計信息

統計信息主要是描述數據庫中表,索引的大小,規模,數據分布狀況等的一類信息。例如,表的行數,塊數,平均每行的大小,索引的leaf blocks,索引字段的行數,不同值的大小等,都屬於統計信息。CBO正是根據這些統計信息數據,計算出不同訪問路徑下,不同join 方式下,各種計划的成本,最后選擇出成本最小的計划。

統計信息是存放在數據字典表中的,如tab$,一般可通過察看某些視圖來獲取統計信息狀況,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS等。在這些視圖中包含表示統計信息的一些字段,這些字段只有搜集過統計信息之后才有值,否則是空的。例如,last_analyzed 字段表示上次統計信息搜集的時間,可以根據這個字段,快速的了解最近一次統計信息搜集的時間。

 

oracle會按自己的規則自動收集統計信息,但是有時候需要自己手動收集統計信息,比如大規模etl導入數據時。

手動收集信息方式:

DBMS_STATS.GATHER_TABLE_STATS的語法如下:
DBMS_STATS.GATHER_TABLE_STATS (ownname VARCHAR2, tabname  VARCHAR2, partname VARCHAR2,
estimate_percent NUMBER,block_sample BOOLEAN,method_opt  VARCHAR2,degree  NUMBER, granularity VARCHAR2, 
cascade  BOOLEAN,stattab VARCHAR2,statid VARCHAR2,
statown VARCHAR2,no_invalidate BOOLEAN, force BOOLEAN);
 
參數說明:
ownname:要分析表的擁有者
tabname:要分析的表名.
partname:分區的名字,只對分區表或分區索引有用.
estimate_percent:采樣行的百分比,取值范圍[0.000001,100],null為全部分析,不采樣.常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默認值,由oracle決定最佳取采樣值.
block_sapmple:是否用塊采樣代替行采樣.
method_opt:決定histograms信息是怎樣被統計的.method_opt的取值如下(默認值為FOR ALL COLUMNS SIZE AUTO):
for all columns:統計所有列 的histograms.
for all indexed columns:統計所有indexed列的histograms.
for all hidden columns:統計你看不到列的histograms
for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:統計指定列的histograms.N的取值范圍[1,254];REPEAT上次
統計過的histograms;AUTO由oracle決定N的大小;SKEWONLY 選項會耗費大量處理時間,因為它要檢查每個索引中的每個列的值的分布情況。
degree:決定並行度.默認值為null.
granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned.
cascade:是收集索引的信息.默認為FALSE.
stattab:指定要存儲統計信息的表,statid如果多個表的統計信息存儲在同一個stattab中用於進行區分.statown存儲統計信息表的擁有者.以上三個參數若不指定,統計信息會直接更新到數據字典.
no_invalidate: Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the 
dependent cursors immediately if set to FALSE.
force:即使表鎖住了也收集統計信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM