"Oracle 优化" Oracle 优化是指 Oracle 数据库管理系统中的一种技术,用于提高数据库查询的效率和性能。Oracle 优化器(Optimizer)是 Oracle 在执行 SQL 之前分析语句的工具。Oracle 优化器有两种优化方式:基于规则的优化方式(Rule-Based Optimization,简称为 RBO)和基于代价的优化方式(Cost-Based Optimization,简称为 CBO)。 基于规则的优化方式(RBO)是指优化器在分析 SQL 语句时,所遵循的是 Oracle 内部预定的规则。例如,在 WHERE 子句中的一列有索引时,优化器就会选择走索引。基于代价的优化方式(CBO)是指优化器在分析语句时,会根据语句的代价来选择执行计划。代价主要包括 CPU 和内存的使用情况。优化器在判断是否使用 CBO 方式时,主要参照的是表及索引的统计信息。 Oracle 优化器的优化模式(Optimizer Mode)包括 Rule、Choose、First Rows、All Rows 四种方式。Rule 模式是指基于规则的优化方式。Choose 模式是指当一个表或索引有统计信息时,优化器就会选择 CBO 方式,如果表或索引没有统计信息,表又不是特别小,而且相应的列有索引时,那么就走索引,走 RBO 方式。First Rows 模式是指优化器将以最快的方式返回查询的最先的几行,从总体上减少了响应时间。All Rows 模式是指优化器将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。 查看缺省的 Oracle 优化器可以使用以下命令:SQL> show parameters optimizer_mode;也可以在 init 文件中对整个 instance 的所有会话设置。也可以单独对某个会话设置:SQL> ALTER SESSION SET optimizer_mode = FIRST_ROWS; 查看统计信息可以使用以下命令:1. 查看表的统计信息:select tt.table_name, tt.num_rows, tt.blocks, tt.empty_blocks, tt.avg_row_len from dba_tables tt where tt.owner='SCOTT';2. 查看索引的统计信息:select ttt.index_name, ttt.num_rows, ttt.distinct_keys, ttt.avg_leaf_blocks_per_key, ttt.clustering_factor from dba_indexes ttt where ttt.owner='SCOTT'; 人工进行统计可以使用以下命令:execute dbms_stats.gather_schema_stats(ownname =>'SCOTT', cascade=>true);对单个表执行统计分析:EXECUTE dbms_stats.gather_table_stats (ownname=>'SCOTT', tabname=>'EMP', estimate_percent=>50, cascade=>true)。 从 Oracle Database 10g 开始,Oracle 在建库后就默认创建了一个名为 GATHER_STATS_JOB 的定时任务,用于自动收集 CBO 的统计信息,调用 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC 收集统计信息。默认情况下在工作日晚上 10:00-6:00 和周末全天开启。一起运行的还有另外一个 Job:AUTO_SPACE_ADVISOR_JOB。可以通过以下查询这个 JOB 的运行情况:select * from Dba_Scheduler_Jobs where JOB_NAME='GATHER_STATS_JOB';
剩余38页未读,继续阅读
- 粉丝: 3814
- 资源: 59万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助