oracle 中的行数统计

一 user_tables 里的num_rows
  这家伙不准,要exec dbms_stats.gather_table_stats(user,'table_name',cascade=>true);
    oracle 会在晚上10点跑这个job,

select JOB_NAME,to_char(LAST_START_DATE,'YYYY-MM-DD hh24:mi:ss') last_start_date ,t.enabled,t.state
from dba_scheduler_jobs t
where t.owner='SYS'
其对一个表的自动收集是看一个表的变动是否超过了数据总量变化的10%,如果超过了就收集,没超过对不起,哥当作没看见。
这个10%怎么来的呢,oracle怎么知道变化了10%,其实oracle 每15分钟会执行一下如下job:
begin
 DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
end;
收集数据的变化情况。
查看表的变化情况:
select TABLE_NAME, INSERTS , UPDATES, DELETES, TIMESTAMP from user_tab_modifications;
说明一下:这个视图只有all/user视图,
如果不希望他自动跑就:

exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');

exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');
统计信息的存放:
--查看统计信息保留时间
 select dbms_stats.get_stats_history_retention from dual;
--更改保留时间
exec dbms_stats.alter_stats_history_retention(10);
--删除统计信息
 exec dbms_stats.purge_stats(sysdate-16);
--查看统计信息所用的表
SELECT s.object_name from dba_objects s where s.object_name like '%OPTSTAT%' and s.object_type='TABLE'
--查看相关索引
 select i.index_name,i.table_name,i.status,i.table_owner,i.status,i.index_type
from dba_indexes i,dba_objects s where i.table_name=s.object_name and  s.object_name like '%OPTSTAT%' and s.object_type='TABLE'
--查看统计信息类型所占用的空间
 SELECT occupant_name, space_usage_kbytes FROM V$SYSAUX_OCCUPANTS;


二 手动统计
 
set serveroutput on ;
set serveroutput on size 1000;
declare           type  record_1
 
is record ( count number(12),table_name varchar(20));
 v_result record_1;
 
begin
        
for c1 in (select 'select count(*) ,'''||table_name||''' from  '||table_name as v_sql from user_tables) loop
       
--dbms_output.put_line(c1.v_sql);
        execute immediate c1.v_sql into v_result;
    
if (v_result.count>0then
         dbms_output.put_line(
'count:'||v_result.count||' table_name: '||v_result.table_name);
       
-- dbms_output.put_line(v_result.table_name);
       end if;
             
end loop;
end;
DBMS_STATS.GATHER_TABLE_STATS (  ownname          VARCHAR2,     
                                                            tabname          VARCHAR2,     
                                                            partname         VARCHAR2,  --要分析的区名
                                                            estimate_percent NUMBER,    --采样的比例
                                                            block_sample     BOOLEAN,   --是否分析块 
                                                            method_opt       VARCHAR2,   
                                                            degree           NUMBER,   --分析的并行度
                                                            granularity      VARCHAR2,     --分析的粒度
                                                            cascade          BOOLEAN,  --收集索引信息
                                                            stattab          VARCHAR2,   --使用的性能表名  
                                                            statid           VARCHAR2,   
                                                            statown          VARCHAR2,   
                                                            no_invalidate    BOOLEAN,   
                                                            force            BOOLEAN
);

posted on 2011-11-07 11:55 snowhill 阅读(2654) 评论(0)  编辑 收藏 引用 所属分类: 数据库-oracle


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

公告

又一年...........

留言簿(3)

随笔分类(13)

文章分类(131)

文章档案(124)

c++

java

linux

oracle

常用软件

其他

网络配置

系统安全

音乐

搜索

最新评论

阅读排行榜