PLSQL_效能最佳化系列15_Oracle Statistics統計資訊

來源:互聯網
上載者:User

標籤:des   style   blog   http   ar   io   color   os   使用   

2014-12-18 BaoXinjian

一、摘要

Statistic 對Oracle 是非常重要的。

它會收集資料庫中對象的詳細資料,並儲存在相應的資料字典裡。 根據這些統計資訊, optimizer 可以對每個SQL 去選擇最好的執行計畫。

Statistic 對Oracle 是非常重要的,它會收集資料庫中對象的詳細資料,並儲存在相應的資料字典裡。

根據這些統計資訊, optimizer 可以對每個SQL 去選擇最好的執行計畫。

Oracle Statistic 的收集,可以使用analyze 命令,也可以使用DBMS_STATS 包來收集。

Oracle 建議使用DBMS_STATS包來收集統計資訊,因為DBMS_STATS包收集的更廣,並且更準確,Analyze 在以後的版本中可能會被移除。

 

二、統計資訊內容和層次

1. Table statistics

(1). 行數,塊數,行平均長度

(2). DBA_TBALES:NUM_ROWS,BLOCKS,AVG_ROW_LEN;

  • Number of rows
  • Number of blocks
  • Average row length

2. Column statistics

(1). 列中唯一值的數量(NDV),NULL值的數量,資料分布;

(2). DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;

  • Number of distinct values (NDV) in column
  • Number of nulls in column
  • Data distribution (histogram)

3. Index statistics

(1). 葉塊數量,等級,聚簇因子;

(2). DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;

  • Number of leaf blocks
  • Levels
  • Clustering factor

4. System statistics

(1). 儲存在aux_stats$中,需要使用dbms_stats收集,I/O統計在X$KCFIO中;

  • I/O performance and utilization
  • CPU performance and utilization

 

三、統計資訊文法

1. analyze

需要使用ANALYZE統計的統計:使用LIST CHAINED ROWS和VALIDATE子句收集空閑列表塊的統計;

analyze 不適合做分區表的分析

  • analyze table tablename compute statistics;
  • analyze index|cluster indexname estimate statistics;
  • analyze table tablename compute statistics for table /for all [local] indexes / for all [indexed] columns
  • analyze table tablename delete statistics
  • analyze table tablename validate ref update
  • analyze table tablename validate structure [cascade]|[into tablename]
  • analyze table tablename list chained rows [into tablename]

2. dbms_stats

dbms_stats能良好地估計統計資料(尤其是針對較大的分區表),並能獲得更好的統計結果,最終制定出速度更快的SQL執行計畫。

這個包的下面四個預存程序分別收集index、table、schema、database的統計資訊:

  • dbms_stats.gather_table_stats     收集表、列和索引的統計資訊;
  • dbms_stats.gather_schema_stats    收集SCHEMA下所有對象的統計資訊;
  • dbms_stats.gather_index_stats     收集索引的統計資訊;
  • dbms_stats.gather_system_stats    收集系統統計資訊
  • dbms_stats.gather_dictioinary_stats   所有字典對象的統計;
  • dbms_stats.delete_table_stats     刪除表的統計資訊
  • dbms_stats.delete_index_stats     刪除索引的統計資訊
  • dbms_stats.export_table_stats     輸出表的統計資訊
  • dbms_stats.create_state_table
  • dbms_stats.set_table_stats     設定表的統計
  • dbms_stats.auto_sample_size

 

四、統計資訊文法

4.1 統計資訊收集如下資料:

(1)表自身的分析: 包括表中的行數,資料區塊數,行長等資訊。

(2)列的分析:包括列值的重複數,列上的空值,資料在列上的分布情況。

(3)索引的分析: 包括索引葉塊的數量,索引的深度,索引的彙總因子等。

4.2 這些統計資訊存放在資料字典裡,如:

(1).  DBA_TABLES

(2).  DBA_OBJECT_TABLES

(3).  DBA_TAB_STATISTICS

(4).  DBA_TAB_COL_STATISTICS

(5).  DBA_TAB_HISTOGRAMS

(6).  DBA_INDEXES

(7).  DBA_IND_STATISTICS

(8).  DBA_CLUSTERS

(9).  DBA_TAB_PARTITIONS

(10). DBA_TAB_SUBPARTITIONS

(11). DBA_IND_PARTITIONS

(12). DBA_IND_SUBPARTITIONS

(13). DBA_PART_COL_STATISTICS

(14). DBA_PART_HISTOGRAMS

(15). DBA_SUBPART_COL_STATISTICS

(16). DBA_SUBPART_HISTOGRAMS

4.3 表的統計資訊:

包含表行數,使用的塊數,空的塊數,塊的使用率,行遷移和連結的數量,pctfree,pctused的資料,行的平均大小:

SELECT NUM_ROWS, --表中的記錄數        BLOCKS, --表中資料所佔的資料區塊數        EMPTY_BLOCKS, --表中的空塊數        AVG_SPACE, --資料區塊中平均的使用空間        CHAIN_CNT, --表中行串連和行遷移的數量        AVG_ROW_LEN --每條記錄的平均長度FROM USER_TABLES 

4.4 索引列的統計資訊   

包含索引的深度(B-Tree的層級),索引葉級的塊數量,叢集因子(clustering_factor), 唯一值的個數。

SELECT BLEVEL, --索引的層數    LEAF_BLOCKS, --葉子結點的個數    DISTINCT_KEYS, --唯一值的個數    AVG_LEAF_BLOCKS_PER_KEY, --每個KEY的平均葉塊個數    AVG_DATA_BLOCKS_PER_KEY, --每個KEY的平均資料區塊個數    CLUSTERING_FACTOR --群集因子FROM USER_INDEXES

4.5 列的統計資訊  

包含 唯一的值個數,列最大小值,密度(選擇率),資料分布(長條圖資訊),NUll值個數

SELECT NUM_DISTINCT, --唯一值的個數    LOW_VALUE, --列上的最小值    HIGH_VALUE, --列上的最大值    DENSITY, --選擇率因子(密度)    NUM_NULLS, --空值的個數    NUM_BUCKETS, --長條圖的BUCKET個數    HISTOGRAM --長條圖的類型FROM USER_TAB_COLUMNS

 

五、案例

案例: 查詢表時,解析計劃返回結果集Rows完全不正確,表通過大量的DML後,未進行分析導致統計資訊過久

Step1. 建立測試SQL

Step2. 查看結果集的Cardinality

Step3. 查看錶的統計計劃,最後分析時間過久

Step4. 分析表

BEGIN   DBMS_STATS.gather_table_stats (‘SH‘, ‘SALES‘);END;

Step5. 分析表後統計資訊變更為最新

Step6. 解析計劃Cardinality變更更為準確

 

參考: 一江水 - http://www.cnblogs.com/rootq/archive/2010/02/04/1663622.html

參考: David - http://blog.csdn.net/tianlesoftware/article/details/4668723

參考: Edwardking888 - http://blog.itpub.net/8183550/viewspace-666335/

PLSQL_效能最佳化系列15_Oracle Statistics統計資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.