ORACLE資料庫物件統計分析技術應用

2021-04-13 09:19:59 字數 3763 閱讀 3278

資料庫物件統計分析技術應用***

oracle在執行sql時如果使用成本方式分析則所有的成本分析資訊**依靠於系統的統計分析表(dba_tables、dba_indexes、dba_tab_columns)資料,如果說統計分析的資料是不準確的,那可能會使oracle分析出來的路徑執行效能極差,所以統計分析資料是影響oracle效能極重要的資訊。

統計分析主要包括產生表及索引的統計資訊

表的統計資訊主要包括表的行數,每行的平均長度(位元組),空閒塊,統計時間等資訊

索引的統計資訊主要包括行數、層數、葉塊數、統計時間等資訊。

另外oracle還可以統計列及資料不對稱資訊,9i還可以統計系統資訊(cpu,i/o)

oracle執行成本分析時首先取出所應用表及索引的統計資料進行分析,其中資料行數是乙個重要的引數,因為oracle在分析表大小時行數為主要引數,如果進行兩個表聯合時,oracle會通過分析表的大小,決定應用小表進行全表查詢,而大表執行聯合查詢,這種效能明顯高於先大表進行全表掃瞄。索引的統計資訊對分析也產生比較大的影響,如oracle通過統計可以分析產生多個索引的優先順序及索引的實用性來確定最優的索引策略。oracle還可以統計列及資料對稱資訊以產生更精確的分析。如乙個表有a欄位的索引,其中a共有兩種值1和0,共10000條記錄,為0的記錄有10條,為1的記錄有9990條,這時如果沒有進行列資料不對稱的統計資訊,那麼oracle對a=0及a=1條件查詢都會進行索引,但實際應用對a=0的索引效能得到了很大的提高,而a=1的索引反而使效能下降。所以說索引特徵值分析資訊對應用索引產生重大影響,精確的資訊使oracle不會使用不應該用的索引。

實際分析

zl_cbqc和zl_yhjbqk都沒有建立統計資訊,執行如下兩個sql oracle將產生不同的執行計畫。

1   select * from dlyx.zl_cbqc b, dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

執行計畫:

select statement, goal = choose                             

nested loops                            

table access full    dlyx     zl_yhjbqk              

table access by index rowid      dlyx     zl_cbqc                   

index unique scan  dlyx     抄表區冊主鍵                    

2  select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

執行計畫:

select statement, goal = choose                             

nested loops                            

table access full    dlyx     zl_cbqc                  

table access by index rowid      dlyx     zl_yhjbqk                

index range scan    dlyx     區冊索引                    

在對兩個表進行了統計分析後

3         select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

執行計畫:

select statement, goal = choose                159  72853     9689449

hash join                159  72853     9689449

table access full      dlyx     zl_cbqc      1     426  19596

table access full      dlyx     zl_yhjbqk   157  72853     6338211

4  select * from dlyx.zl_cbqc b,dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

執行計畫:

select statement, goal = choose                159  72853     9689449

hash join                159  72853     9689449

table access full      dlyx     zl_cbqc      1     426  19596

table access full      dlyx     zl_yhjbqk   157  72853     6338211

從以上測試可以明顯看出oracle的分析結果

第1條sql與第2條sql在沒有統計分析的資訊下進行,oracle無法進行判斷,只能以規則方法進行分析,根據表的出現先後順序有明顯關係。

第3條sql與第4條sql在有統計分析的資訊下進行,oracle分析與表的出現先後順序無關,因為它已經知道了表的資料量並且已經確定返回的資料量基本上是兩個表所有的資料,所以對錶兩個表進行了hash join (同時取出兩個表的資料然後在記憶體中進行聯合產生返回結果)。

相關技術

用analyze語句產生分析資料

分析表:analyze table zl_yhjbqk estimate statistics sample 20 percent

分析索引:analyze index使用者資料表主鍵compute statistics

分析列:analyze table zl_yhjbqk compute statistics for columns hbs_bh

分析索引列:analyze table zl_yhjbqk compute statistics for all indexed columns

用sys.dbms_utility包分析資料

分析資料庫(包括所有的使用者物件和系統物件):analyze_database

分析使用者所有的物件(包括使用者方案內的表、索引、簇):analyze_schema

用sys.dbms_stats包處理分析資料

分析資料庫(包括所有的使用者物件和系統物件):gather_database_stats

分析使用者所有的物件(包括表、索引、簇):gather_schema_stats

分析表:gather_table_stats

分析索引:gather_index_stats

刪除資料庫統計資訊:delete_database_stats

刪除使用者方案統計資訊:delete_schema_stats

刪除表統計資訊:delete_table_stats

刪除索引統計資訊:delete_index_stats

刪除列統計資訊:delete_column_stats

設定表統計資訊:set_table_stats

設定索引統計資訊:set_index_stats

設定列統計資訊:set_column_stats

oracle推薦使用者採用sys.dbms_stats包體進行分析,因為在oracle9i及其以上的版本全面擴充的此包體的功能。sys.dbms_utility包體進行分析時會對所有的資訊全部分析一遍,時間比較長,而在9i中sys.dbms_stats可以利用表修改監控技術來判斷需統計分析的表進行,節省了使用者的分析資源。

備註:

oracle資料庫SQL相關指標統計分析

查詢sql當前的指標 select a.hash value,a.sql text,a.plan hash value,round a.buffer gets a.executions bg per exec,round a.cpu time 1000 a.executions cpu per ex...

資料的統計分析

資料預處理之後,我們要做一些統計分析,來觀察我們的資料,這其中包括 描述性分析 統計推斷。描述性分析 主要是統計指標 圖表。1 集中趨勢分析 除了分位數,我們還可以結合 中位數 眾數 平均數三者的關係。具體地 眾數在中位數左側,平均數在中位數右側,則此時資料呈正偏態分布,又叫右偏,存在極大異常值。是...

資料特徵分析 統計分析

統計分析是對定量資料進行統計描述,常從集中趨勢和離中趨勢兩個方面分析。集中趨勢 指一組資料向某一中心靠攏的傾向,核心在於尋找資料的代表值或中心值 統計平均數 算數平均數和位置平均數 算術平均數 簡單算術平均數和權重算術平均數 位置平均數 中位數和眾數 離中趨勢 極差和分位差 標準差和方差 隨機生成整...