ORACLE优化器的优化方式有两大类,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。
A、 RBO方式:优化器在分析SQL语句时,更据数据库中表和索引等定义信息,遵循的是Oracle内部预定的一些规则。比如我们常见的:当一个where子句中的一列有索引时去走索引而不走全表扫描。
B、 CBO方式:依词义可知,它是看语句的代价(Cost)了。基于代价的查询,数据库根据搜集的表和索引的数据的统计信息(统计信息通过analyze 命令或者使用dbms_stats包来搜集)综合来决定选取一个数据库认为最优的执行计划(实际上不一定最优) 。统计信息给出表的大小 、有多少行、每行的长度等信息。
注意:这些统计信息起初在库内是没有的,是根据 analyze 命令或者dbms_stats包来定期搜集后才出现的,所以很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。为了使用基于成本的优化器(CBO) , 你必须经常运行analyze或dbms_stats命令,以增加数据库中的对象统计信息(object statistics)的准确性。
在Oracle8及以后的版本,Oracle强列推荐用CBO的方式。
1. 如何查看对象统计信息(object statistics)
对CBO模式,对象统计信息至关重要。如何查看对象统计信息(object statistics)?
Oracle中关于表的统计信息是在数据字典中的,可以下SQL查询到,eg:
SELECT table_name,num_rows, blocks, empty_blocks AS empty, avg_space, chain_cnt, avg_row_len
FROM dba_tables
WHERE owner = ‘ONT’
AND table_name = ‘OE_ORDER_LINES_ALL’;
TABLE_NAME NUM_ROWS BLOCKS EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
OE_ORDER_LINES_ALL 5344 505 5 0 0 441
可以看到数据字典中统计到的该表有5344笔记录,我们下SQL验证一下:
select count(*) from apps.OE_ORDER_LINES_ALL;
发现返回是16518笔记录,可见这个表的统计信息是比较陈旧的,真实数据与统计到的数据有较大的差别。在这种情况下,如果某个View用到此Table,且系统使用CBO的方式,则可能导致Oracle的optimizer给出效率低下的执行计划。
此时可以用ANALYZE去重新统计OE_ORDER_LINES_ALL这个表,可以下SQL:
ANALYZE TABLE ONT.OE_ORDER_LINES_ALL COMPUTE STATISTICS;
再次Query数据字典:
TABLE_NAME NUM_ROWS BLOCKS EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
OE_ORDER_LINES_ALL 16518 1530 1035 865 257 643
发现此时的信息已是最新的了。有了比较正确的统计信息,optimizer才能给出高效的执行计划。
2. 并发请求: 统计数据收集模式(FNDGSCST) / Gather Schema Statistics
Oracle ERP中有几个与Gather有关的标准Request:
Gather All Column Statistics –FND_STATS.GATHER_ALL_COLUMN_STATS()
Gather Column Statistics –FND_STATS.GATHER_COLUMN_STATS()
Gather Schema Statistics –FND_STATS.GATHER_SCHEMA_STATS()
Gather Table Statistics –FND_STATS.GATHER_TABLE_STATS()
查看FND_STATS 这个Package的写法,其实它就是在调用Oracle DB中Standard的Package dbms_stats 中的某些Function。
Oracle DB中常用的Gather有以下一些,DBA也可以直接在Database级别上定期Run这些Function,以便能让Oracle统计到最新的数据库状况:
dbms_stats.gather_database_stats();
dbms_stats.gather_schema_stats();
dbms_stats.gather_table_stats();
dbms_stats.gather_index_stats();
Oracle CBO需要系统定期分析统计表/索引。 只有这样CBO才能使用正确的SQL访问路径,提高查询效率。 因此在Instance Level的optimizer_mode = choose ,定期运行ANALYZE 或dbms_stats是非常重要的,尤其是当上次统计后,数据量已发生较大变化之后。
注意:统计操作是很耗资源的动作,要在系统Loading小的时候进行。
分享到:
相关推荐
Oracle 性能调优 -- 解决 CPU 高度消耗 (100%) Oracle 性能调优是数据库管理和维护中非常重要的一部分。当数据库出现性能问题时,需要快速定位和解决问题,否则将影响业务的正常运作。在这里,我们将讨论如何解决 ...
Oracle性能调优-朝拜先知之旅 本文主要介绍了在 Linux 环境下安装 Oracle 10g 的方法,并对 Oracle 性能调优进行了详细的说明。下面是本文的知识点总结: 一、Oracle 基本概念 * Oracle 是一种关系型数据库管理...
Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优 Oracle性能调优
可以使用 STATSPACKEstablish Oracle 性能快照表空间,获取性能数据,可以生成多个快照。 确定当前 Oracle 性能瓶颈 确定当前 Oracle 性能瓶颈是 Oracle 性能调优的第三步。从 Oracle 等待接口 v$system_event、v$...
还有数据库管理工具,如MySQL Workbench或Oracle SQL Developer,它们提供了丰富的功能,包括数据库设计、数据导入导出、备份恢复以及性能调优等。 文件"数据库管理系统资源的生产者-消费者层次结构.vsd"可能是一个...
### 数据库性能调优——原理与技术(针对Oracle) #### 一、数据库性能调优概述 在当前数据密集型的应用环境中,数据库系统的性能直接影响着企业的业务效率和用户体验。《数据库性能调优——原理与技术2》这本书...
动态性能视图提供包括系统负荷、实例效率百分比、共享池统计、时间模型统计和突出等待事件等多维度的性能数据。AWR(自动工作负载存储库)或Statspack能够记录数据库的性能信息,并生成报告,有助于DBA监控和诊断...
- **AWR (Automatic Workload Repository)**:自动负载存储库是Oracle提供的一种用于收集数据库性能统计数据的机制。通过对AWR报告的分析,可以发现导致性能瓶颈的原因。 - **ADDM (Automatic Database Diagnostic ...
### Oracle性能调优原理及具体手段 #### 一、Oracle结构与实例 ##### 1.1 Oracle实例(Instance) - **定义与作用**:Oracle实例是访问Oracle数据库的一个途径,它仅能打开一个数据库。 - **组成**:由SGA(系统...
数据库性能调优是IT领域中的一个关键话题,尤其是在大数据时代,高效、稳定的数据处理能力直接影响着业务的运行效率。这个压缩包文件“数据库性能调优--原理与技术”很可能包含了关于如何优化数据库性能的深入讲解和...
- 监控工具的使用:除了STATSPACK,还可以使用Oracle Enterprise Manager Cloud Control、ASH (Active Session History) 和AWR来收集和分析性能数据。 - SQL优化:分析性能最差的SQL语句,考虑使用EXPLAIN PLAN、SQL...
1. **性能监控**:使用Oracle提供的工具,如AWR(Automatic Workload Repository)报告和ASH(Active Session History),收集系统性能数据。 2. **性能问题识别**:分析收集到的数据,识别出导致性能下降的因素,如...
综上,AWR报告是Oracle性能调优的有力工具,通过对各项指标的深入分析,DBA能够定位问题,采取相应措施提高系统性能。然而,理解并运用这些信息需要专业知识和经验,确保优化措施既能解决问题,又不会引入新的问题。...
为了确保Oracle数据库能够高效稳定地运行,并且能够满足业务发展的需求,进行Oracle系统的性能调优就显得尤为重要。 性能调优的目标主要包括: - 提高数据库查询速度。 - 减少系统资源消耗(如CPU、内存等)。 - ...
Oracle性能调优是数据库管理中的核心任务,尤其是在处理大规模数据和高并发应用时。本文主要分享了Oracle DBA在实际工作中遇到性能问题时的一些解决策略,重点在于通过监控操作系统层面的指标来诊断Oracle数据库的...
《高级owi与oracle性能调优》是一本专注于Oracle数据库性能优化的专业技术书籍,主要针对OWI(Oracle等待事件)的调优技术进行详细讲解。由于文中提供的部分电子书页码信息仅为重复的电子书书店的联系方式,并没有...
小布oracle性能调优目录小布oracle性能调优目录小布oracle性能调优目录
【通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔】 在成为一名优秀的架构师的过程中,性能调优是不可或缺的一环。本文主要关注的是Tomcat服务器的性能优化,以提高其处理并发请求的能力和整体性能。在前一...
### 大型数据库应用的性能调优-案例学习 #### 引言 本文档通过一个具体的案例——PeopleSoft系统的性能优化,深入探讨了如何确保关键业务应用在大型数据库环境下的高性能运行。虽然本案例主要针对的是PeopleSoft与...