GATHER_STATS_JOB收集统计信息
OWNER JOB_NAME TO_CHAR(LAST_START_DATE,'YYYY- TO_CHAR(LAST_RUN_DURATION,'YYY
------------------------------ ------------------------------ ------------------------------ ------------------------------
SYS GATHER_STATS_JOB 2007-05-22 22:00:03 +000000000 00:01:55.186000
--我们也可以将这个任务停止:
SQL> BEGIN
2 DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
3 END;
4 /
PL/SQL procedure successfully completed
SQL> SELECT OWNER,JOB_NAME,ENABLED
2 FROM DBA_SCHEDULER_JOBS
3 WHERE JOB_NAME = 'GATHER_STATS_JOB';
OWNER JOB_NAME ENABLED
------------------------------ ------------------------------ -------
SYS GATHER_STATS_JOB FALSE
--启动该任务
SQL> BEGIN
2 DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');
3 END;
4 /
PL/SQL procedure successfully completed
SQL> SELECT OWNER,JOB_NAME,ENABLED
2 FROM DBA_SCHEDULER_JOBS
3 WHERE JOB_NAME = 'GATHER_STATS_JOB';
OWNER JOB_NAME ENABLED
------------------------------ ------------------------------ -------
SYS GATHER_STATS_JOB TRUE
--手工执行exec dbms_stats.gather_database_stats_job_proc
SQL> exec dbms_stats.gather_database_stats_job_proc
--收集没有分析过的表的统计信息
begin
dbms_stats.gather_schema_stats(ownname=>scott,options=>"gather empty");
end;
--重新分析修改量超过10%的表(这些修改包括插入、更新和删除)
begin
dbms_stats.gather_schema_stats(ownname=>scott,options=>"gather stale");
end;
SQL> create table aa as select * from dba_tables;
Table created
SQL> select table_name,NUM_ROWS from user_tables where table_name='AA';
TABLE_NAME NUM_ROWS
------------------------------ ----------
AA
SQL> DESC dbms_stats.gather_schema_stats;
Parameter Type Mode Default?
---------------- ------------------------ ---- --------
OWNNAME VARCHAR2 IN
ESTIMATE_PERCENT NUMBER IN Y
BLOCK_SAMPLE BOOLEAN IN Y
METHOD_OPT VARCHAR2 IN Y
DEGREE NUMBER IN Y
GRANULARITY VARCHAR2 IN Y
CASCADE BOOLEAN IN Y
STATTAB VARCHAR2 IN Y
STATID VARCHAR2 IN Y
OPTIONS VARCHAR2 IN Y
OBJLIST SYS.DBMS_STATS.OBJECTTAB OUT
STATOWN VARCHAR2 IN Y
NO_INVALIDATE BOOLEAN IN Y
GATHER_TEMP BOOLEAN IN Y
GATHER_FIXED BOOLEAN IN Y
STATTYPE VARCHAR2 IN Y
FORCE BOOLEAN IN Y
OWNNAME VARCHAR2 IN
ESTIMATE_PERCENT NUMBER IN Y
BLOCK_SAMPLE BOOLEAN IN Y
METHOD_OPT VARCHAR2 IN Y
DEGREE NUMBER IN Y
GRANULARITY VARCHAR2 IN Y
CASCADE BOOLEAN IN Y
STATTAB VARCHAR2 IN Y
STATID VARCHAR2 IN Y
OPTIONS VARCHAR2 IN Y
STATOWN VARCHAR2 IN Y
NO_INVALIDATE BOOLEAN IN Y
GATHER_TEMP BOOLEAN IN Y
GATHER_FIXED BOOLEAN IN Y
STATTYPE VARCHAR2 IN Y
FORCE BOOLEAN IN Y
SQL> begin
2 dbms_stats.gather_schema_stats(ownname=>'SCOTT',options=>'gather empty');
3 end;
4 /
PL/SQL procedure successfully completed
SQL> select table_name,NUM_ROWS from user_tables where table_name='AA';
TABLE_NAME NUM_ROWS
------------------------------ ----------
AA 1539
SQL> INSERT INTO AA SELECT * FROM DBA_TABLES WHERE ROWNUM<160;
159 rows inserted
SQL> COMMIT;
SQL> select table_name,NUM_ROWS from user_tables where table_name='AA';
TABLE_NAME NUM_ROWS
------------------------------ ----------
AA 1539
SQL> begin
2 dbms_stats.gather_schema_stats(ownname=>'SCOTT',options=>'gather stale');
3 end;
4 /
PL/SQL procedure successfully completed
SQL> select table_name,NUM_ROWS from user_tables where table_name='AA';
TABLE_NAME NUM_ROWS
------------------------------ ----------
AA 1698
SQL> INSERT INTO AA SELECT * FROM DBA_TABLES WHERE ROWNUM<150;
149 rows inserted
SQL> COMMIT;
Commit complete
SQL> begin
2 dbms_stats.gather_schema_stats(ownname=>'SCOTT',options=>'gather stale');
3 end;
4 /
PL/SQL procedure successfully completed
SQL> select table_name,NUM_ROWS from user_tables where table_name='AA';
TABLE_NAME NUM_ROWS
------------------------------ ----------
AA 1698