Oracle資料庫物件統計分析技術應用(analyze/dbms_utility/dbms_stats)
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在得到了表的統計分析資料後才會進行成本分析,否則採用規則分析。
並不是所有的統計資料都會對ORACLE分析產生影響,有些統計資料ORACLE並不處理,只是提供給使用者一個參考資訊,也可能在ORACLE以後的版本中利用這些資訊進行分析。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-430149/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫的資料統計(Analyze)Oracle資料庫
- Oracle統計分析 - dbms_statsOracle
- dbms_stats與analyze分析彙總
- oracle統計資訊 使用dbms_stats包收集統計資料Oracle
- 探秘資料庫中的平行計算技術應用資料庫
- Oracle資料庫資料物件分析(上)Oracle資料庫物件
- Oracle資料庫資料物件分析(轉)Oracle資料庫物件
- 資料庫效能調優之始: analyze統計資訊資料庫
- 大資料建模、分析、挖掘技術應用大資料
- Oracle dbms_stats包和analyze 的比較Oracle
- Java技術在多資料庫系統中的應用研究Java資料庫
- Oracle DBMS_STATS 包 和 Analyze 命令的區別Oracle
- 大資料分析技術有哪些應用步驟大資料
- 大型Electron應用本地資料庫技術選型資料庫
- 淺談資料庫防火牆技術及應用資料庫防火牆
- ORACLE資料庫恢復技術Oracle資料庫
- Oracle資料庫同步技術1Oracle資料庫
- Oracle資料庫同步技術2Oracle資料庫
- Oracle資料庫同步技術3Oracle資料庫
- Oracle資料庫同步技術4Oracle資料庫
- Oracle資料庫同步技術5Oracle資料庫
- 關於大資料的建模、分析、挖掘技術應用大資料
- oracle資料庫資料字典應用Oracle資料庫
- 超大型Oracle資料庫應用系統的設計方法Oracle資料庫
- 量化技術分析應用
- 用DBMS_STATS匯入匯出oracle統計資訊Oracle
- Oracle技術支援是如何分析資料庫效能問題的Oracle資料庫
- dbms_stat, dbms_utility與analyze的區別
- 迪斯卡(Disrupt DEX)礦池系統開發/資料分析/技術應用
- Oracle資料庫——xTTS技術的使用Oracle資料庫TTS
- ORACLE 資料庫備份技術(轉)Oracle資料庫
- 物聯網之智慧農業應用分析&大資料之資料探勘技術的應用大資料
- 使用dbms_stats包收集統計資料(zt)
- 【應用 業務】做資料庫技術支援的一點感悟資料庫
- LLVM技術在GaussDB等資料庫中的應用LVM資料庫
- 資料庫在資料分析中如何應用資料庫
- 智慧客流統計的新技術應用
- 大資料技術原理與應用大資料