Gather database statistics
Gather stats on the entire database...execute dbms_stats.gather_database_stats;
Or...
execute dbms_stats.gather_database_stats( - estimate_percent => 1, - method_opt => 'FOR ALL COLUMNS SIZE 1',- cascade => TRUE);
Gather stats for a single schema...
execute dbms_stats.gather_schema_stats('SCOTT');
Or...
execute dbms_stats.gather_schema_stats( - ownname => 'SCOTT', - estimate_percent => 1, - method_opt => 'FOR ALL COLUMNS SIZE 1',- cascade => TRUE);
You can let oracle come up with the estimate figure by using dbms_stats.auto_sample_size
or...
or...
execute dbms_stats.gather_schema_stats( - ownname => 'SYS', - cascade => TRUE);
Table statistics
exec dbms_stats.gather_table_stats('<owner>', '<table_name>');
Delete stats
exec dbms_stats.delete_database_stats;
exec dbms_stats.delete_schema_stats('SCOTT');
exec dbms_stats.delete_table_stats('SCOTT', 'EMPLOYEES');
exec dbms_stats.delete_index_stats('SCOTT', 'EMPLOYEES_PK');
Gather system stats
execute dbms_stats.gather_system_stats('Start');
Wait for a while - idealy with the database under a typical workload
execute dbms_stats.gather_system_stats('Stop');
To see the current system statistics
select pname , pval1 from sys.aux_stats$ where sname = 'SYSSTATS_MAIN' /
Export/Import optimizer statistics
exec dbms_stats.create_stat_table(ownname => 'SYS',- stattab => 'prod_stats', tblspace => 'USERS');
Populate the table with the current stats...
exec dbms_stats.export_schema_stats(ownname => 'SCOTT',- statown=>'SYS', stattab=>'prod_stats');
At this point you need to:
1) take an export of the 'prod_stats' table
2) import 'prod_stats' into the target database
3) load the statistics using this command...
1) take an export of the 'prod_stats' table
2) import 'prod_stats' into the target database
3) load the statistics using this command...
exec dbms_stats.import_schema_stats(ownname => 'SCOTT',- statown=>'SYS', stattab=>'prod_stats');
Old style analyze
analyze table employees compute statistics;
analyze table employees estimate statistics sample 100 rows;
analyze table employees estimate statistics sample 15 percent;
analyze table employees estimate statistics sample 15 percent;
analyze index employees_ind compute statistics;
Show a count of analyezed tables broken down by schema
set pages 999 lines 100 select a.owner , a.total_tables tables , nvl(b.analyzed_tables,0) analyzed from (select owner , count(*) total_tables from dba_tables group by owner) a , (select owner , count(last_analyzed) analyzed_tables from dba_tables where last_analyzed is not null group by owner) b where a.owner = b.owner (+) and a.owner not in ('SYS', 'SYSTEM') order by a.total_tables - nvl(b.analyzed_tables,0) desc /
Show tables that have analyze dates older than today
select count(last_analyzed) left_to_do from dba_tables where owner = '&schema' and trunc(last_analyzed) < trunc(sysdate) order by 1 /
No comments:
Post a Comment