一 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>0) then
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
);