Oracle DBMS_STATS 包 和 Analyze 命令的區別
當某 個索引處於monitoring usage的時候,如果使用dbms_stats去分析表並且同時分析索引,會將該索引的v$object_usage.USED 設定為TRUE,導致監控了N天的可疑索引前功近棄。如果使用analyze,索引的狀態不會被設定為USE = TRUE
DBMS_STATS僅僅收集對CBO有用的統計資訊,所以一些空間使用情況資訊和使用FreeList管理的資訊都不會被收集,這些資訊包括:
If statistics unrelated to the cost basedoptimizer are required, then these must still be collected using the theANALYZE command. These statistics include:
Space Usage information :
EMPTY_BLOCKS,
AVG_SPACE,
CHAIN_CNT
Information on freelistblocks
AVG_SPACE_FREELIST_BLOCKS,NUM_FREELIST_BLOCKS
因為以上資訊對於CBO計算成本並沒有幫助,所以DBMS_STATS也就無意也無法收集它們,但是Analyze命令還是可以做到收集以上這些資訊。
此 外因為CBO其實並不會參考Cluster型別物件的統計資訊來計算Cost成本,而是使用cluster中各個表的統計資訊(DBMS_STATS does not gathercluster statistics, but you can use DBMS_STATS to gather statistics on theindividual tables instead of the whole cluster. )
所以DBMS_STATS也不支援收集Cluster的統計資訊。
Oracle公司已經明確了Analyze作為”validate”驗證命令的功能定位,且很多內部的工具和指令碼仍在使用AnalyzeTable/Cluster/Index的特有功能,所以可以預期Analyze命令在未來的一段時間內也不會被廢棄。
(1)Analyze validate structure 驗證表、簇、索引的結構的完整性,使用cascade選項可以交叉驗證表和索引的資料完整,online選項可以做到線上驗證
(2)Analyze list chained rows 收集表、簇上的Migrated and Chained Rows鏈式或遷移行資訊
(3)Analyze table compute statistics 收集表上的 empty_blocks、avg_space 空間使用資訊
(4)Analyze Cluster 收集簇的資訊,其實cluster上唯一可統計的資訊是DBA_CLUSTERS.AVG_BLOCKS_PER_KEY(Numberof blocks in the table divided by number of cluster keys) , 所以收集cluster的statistics意義不大
1.對於分割槽表,建議使用DBMS_STATS,而不是使用Analyze語句。
(1)可以並行進行,對多個使用者,多個Table
(2)可以得到整個分割槽表的資料和單個分割槽的資料。
(3)可以在不同級別上ComputeStatistics:單個分割槽,子分割槽,全表,所有分割槽。
(4)可以倒出統計資訊
(5)可以使用者自動收集統計資訊
2. DBMS_STATS的缺點
(1)不能Validate Structure
(2)不能收集CHAINEDROWS, 不能收集CLUSTERTABLE的資訊,這兩個仍舊需要使用Analyze語句。
(3)DBMS_STATS 預設不對索引進行Analyze,因為預設Cascade是False,需要手工指定為True
3. 對於oracle 9裡面的External Table,Analyze不能使用,只能使用DBMS_STATS來收集資訊.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-1871424/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle dbms_stats包和analyze 的比較Oracle
- 【效能優化】ANALYZE 與DBMS_STATS的區別優化
- oracle dbms_stats 包Oracle
- dbms_stats與analyze分析彙總
- dbms_stat與analyze的區別
- EBS 中FND_STATS和dbms_stats區別
- analyze index 時validate structure和compute statistics的區別IndexStruct
- oracle的dbms_stats包詳細解說Oracle
- source和.命令的區別
- 原始碼包和rpm包的區別原始碼
- su和sudo命令的區別
- source 和export 命令的區別Export
- oracle統計資訊包--dbms_stats介紹Oracle
- jar包和war包的介紹與區別JAR
- dbms_stat, dbms_utility與analyze的區別
- jar包、war包和ear包的介紹與區別JAR
- 高仿包和1:1包區別
- Linux su命令和sudo命令的區別Linux
- Oracle Analyze的用法Oracle
- Oracle - @和@@、&與&& 的區別Oracle
- MySQL和Oracle的區別MySqlOracle
- Analyze 命令的使用方法
- Oracle資料庫物件統計分析技術應用(analyze/dbms_utility/dbms_stats)Oracle資料庫物件
- Oracle User 和 Schema 的區別Oracle
- Oracle Purge和drop的區別Oracle
- oracle中in和exists的區別Oracle
- Linux 命令 su 和 sudo 的區別Linux
- linuxsu和sudo命令的區別Linux
- 【轉】dbms_stats.gather_table_stats與analyze table 的區別
- gucci高仿包和正品區別?
- Oracle的redo 和undo的區別Oracle
- Oracle分析表工具DBMS_STATS命令的一些總結Oracle
- Oracle dba角色和sysdba的區別Oracle
- Oracle 和 mysql的9點區別OracleMySql
- oracle中distinct和group by的區別Oracle
- oracle中 DG和GG的區別Oracle
- Oracle中truncate和delete的區別Oracledelete
- (轉)ORACLE 中IN和EXISTS的區別Oracle