Oracle的自动分析是Oracle数据库的一个非常重要的功能,它可以自动地收集、分析并存储关于数据库的统计信息,以便于优化数据库的性能。下面将详细介绍如何使用analyze命令来实现自动分析。
Oracle数据库中的每个表和索引都有一组统计信息,包括行数、块数、平均行长度、空块数等等。这些信息在Oracle数据库优化器中用于选择最佳执行计划,以提高查询的执行效率。通常,我们需要手动收集这些统计信息,但是如果我们开启了Oracle自动分析,数据库将会在后台自动地收集和更新这些信息。
alter session set "_optimizer_autostats_on_sampling"=true;
首先,我们需要开启Oracle自动分析的开关。在Oracle 11g及以上版本中,默认情况下该功能是开启的,但有时候需要手动开启。在SQLPLUS终端中,我们可以使用以上命令来开启自动分析。
Oracle自动分析功能可以通过以下方法来收集统计信息:
1. 自动收集对于DDL操作而言是及时的
即,对于新建的、修改的、变更的、删除的表、索引和列,在用户提交DDL操作之后,数据库会自动地收集该对象的统计信息。例如,我们修改了一张表,设置了一个新的索引,则该新的索引第一次被使用时,数据库会自动地为该索引收集统计信息。
2. 自动收集对于DML操作而言是在合适的时间点的
即,当一个表或索引发生一定量的数据变动时,数据库会自动收集该对象的统计信息。这里的“一定量”是一个可设置的阈值,通常是行数或块数。当一个表或索引的数据发生较大变动时,自动收集统计信息可以提高查询的执行效率。例如,我们使用insert语句向表中插入了一批数据,则在该表中累计插入了可设置阈值之后,数据库会自动地为该表收集统计信息。
3. 自动收集部分全局级别的统计信息
即,对于全局级别的信息,如全局块使用率、全局空间使用率等等,数据库会在固定的时间间隔内自动收集并更新该类的统计信息。
Oracle自动分析可以在大部分情况下自动地满足我们的需求,极大地提高了数据库运维的效率。但在一些特定的情况下,可能需要手动地收集统计信息来保证查询的执行效率。
analyze table tablename compute statistics;
analyze index indexname compute statistics;
对于需要手动收集统计信息的情况,我们可以使用以上命令来收集该对象的统计信息。analyze命令将会消耗较大的CPU和I/O资源,因此,我们需要谨慎选择需要手动收集统计信息的对象。