练习6:自动收集统计信息
1、 使用SQL*Plus,一用户SYSTEM连接。
2、创建一个练习用户TESTUSER,并授予DBA角色。
SQL>create user testuser identified by testuser;
SQL>grant dba to testuser;
3、以TESTUSER用户登录实例,创建一组对象。
图 自动收集统计信息
SQl>select num_rows,last_analyzed from user_tables where table_name='TESTTAB';
NUM_ROWS LAST_ANALYZED
---------- --------------
4、在SQL*PLUS中执行下面代码。
Begin
dbms_stats.gather_table_stats(
ownname=> 'TESTUSER',
tabname=> 'TESTTAB' ,
estimate_percent=> DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade=> DBMS_STATS.AUTO_CASCADE,
method_opt=> 'FOR ALL COLUMNS SIZE AUTO');
end;
/
5、在SQL*Plus中,通过修改NLS_DATE_FORMAT参数,来显示完成的时间,并确认收集了统计信息。
图14-3 查看自动收集统计信息
在Oracle 10g数据库中,如果我们是通过DBCA工具创建的数据库,那么数据库中存在一个收集整个数据库统计信息的自动作业叫GATHER_STATS_JOB。统计信息能够改善查询的性能,但是在收集统计信息的过程中会对数据库造成一定的压力。所以我们可以根据需要统计相关的信息,停止系统的整体收集作业。
在11g数据库中有自动维护作业,自动维护作业中的一项也是收集统计信息,一般情况下这两个作业可以完成我们业务系统收集信息的目的,但当系统的数据发生较大变化是(如导入数据或装载数据)需要手工收集统计信息。