Analyze分析表或者索引

rainbowbridg發表於2007-10-28

Analyze分析表或者索引

demo:
--62254
SELECT dt.table_name, dt.num_rows, dt.blocks, dt.empty_blocks AS empty,
       dt.avg_space, dt.chain_cnt, dt.avg_row_len,
       TO_CHAR( dt.LAST_ANALYZED, 'MM/DD/YYYY HH24:MI:SS' )
  FROM dba_tables dt
 WHERE dt.owner = 'INV'
   AND dt.table_name = 'MTL_MATERIAL_TRANSACTIONS';

DECLARE
  v_num_rows NUMBER;
  v_num_blocks NUMBER;
  v_avg_row_len NUMBER;
BEGIN
  -- retrieve the values of table statistics on INV.MTL_MATERIAL_TRANSACTIONS
  -- statistics table name: OE.SAVESTATS    statistics ID: TEST1
  sys.DBMS_STATS.get_table_stats( ownname => 'INV'
                                 ,tabname => 'MTL_MATERIAL_TRANSACTIONS'
                                 ,partname => NULL 
                                 ,stattab => NULL
                                 ,statid => NULL
                                 ,numrows => v_num_rows
                                 ,numblks => v_num_blocks
                                 ,avgrlen => v_avg_row_len
                                 ,statown => NULL);
  -- print the values
DBMS_OUTPUT.PUT_LINE( 'num_rows='
                    || v_num_rows
                    || ',num_blocks='
                    || v_num_blocks
                    || ',avg_row_len='
                    || v_avg_row_len);                     
-- num_rows=62254,num_blocks=2975,avg_row_len=271                     
END;  


-- 對schema 進行gather 
DECLARE
BEGIN
    sys.DBMS_STATS.gather_schema_stats(ownname => 'INV');
    sys.DBMS_STATS.gather_schema_stats(ownname => 'GL');
    sys.DBMS_STATS.gather_schema_stats(ownname => 'PO');
EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line('error');
END;

參考文件:

怎麼樣分析表或索引
[A]命令列方式可以採用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]
等等。
如果想分析整個使用者或資料庫,還可以採用工具包,可以並行分析
Dbms_utility(8i以前的工具包)
Dbms_stats(8i以後提供的工具包)
如
dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
這是對命令與工具包的一些總結
1、對於分割槽表,建議使用DBMS_STATS,而不是使用Analyze語句。
a) 可以並行進行,對多個使用者,多個Table
b) 可以得到整個分割槽表的資料和單個分割槽的資料。
c) 可以在不同級別上Compute Statistics:單個分割槽,子分割槽,全表,所有分割槽
d) 可以倒出統計資訊
e) 可以使用者自動收集統計資訊
2、DBMS_STATS的缺點
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的資訊,這兩個仍舊需要使用Analyze語句。
c) DBMS_STATS 預設不對索引進行Analyze,因為預設Cascade是False,需要手工指定為True
3、對於oracle 9裡面的External Table,Analyze不能使用,只能使用DBMS_STATS來收集資訊
[@more@]

ref:

desd desc dbms_outln_edit
就知道啦,CREATE_EDIT_TABLES就是建立outln使用者的字典表的。 重建outln使用者

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7916042/viewspace-979149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章