发现问题:
通过statspack(statspack的bug导致buffer gets为负值,部分top sql无法正确列出),经观察,由于两个数据库同在一台主机,c数据库也消耗了主机1/4的CPU资源,也存在着未优化的sql语句,具体如下:该语句从2012年1月13日凌晨开始出现,消耗了C数据库80%的资源,即整个主机15%的CPU。需要提前说明一,由于历史原因,该数据库使用RBO。
CPU Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------------------- -------------- ------ -------- --------- ----------
3,968,965,486 269 14,754,518.5 81.9 ######## 36067.86 26012873
Module: JDBC ConnectClient
select distinct a.transactionid, a.tansactioncode, a.brand,a.m
sisdn, a.new_msisdn,a.user_status, a.status_chg_time, a.status
_opr_time,a.create_time, a.rec_sts, '08' as src,b.BILL_FLG,b.SP
_ID,b.BIZ_CODE from aicbs_usc_proc_batcha,aicbs_spu_biz_order
b where a.msisdn = b.msisdn and rec_sts=:v0 andb.biz_type = :v
1 and b.STS != 'D' and a.user_status!='05' order bya.create_ti
me asc
优化方法:
调整表B和表A的顺序(具体如下),使oracleRBO优化器使用小表作为驱动表,经测试单个执行时间从120秒可以下降到1秒的时间,估计能使主机CPU利用率下降10%。
修改后的sql如下:
select distincta.transactionid,
a.tansactioncode,
a.brand,
a.msisdn,
a.new_msisdn,
a.user_status,
a.status_chg_time,
a.status_opr_time,
a.create_time,
a.rec_sts,
'08' as src,
b.BILL_FLG,
b.SP_ID,
b.BIZ_CODE
from aicbs_spu_biz_order b,aicbs_usc_proc_batch a,
where a.msisdn =b.msisdn
and rec_sts = :v0
and b.biz_type = :v1
and b.STS != 'D'
and a.user_status != '05'
order bya.create_time asc
原理补充:
基于规则的优化器(RBO)使用oracle内部的执行规则来确认sql的执行路径。另外,ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(我们称它为驱动表或基础表,drivingtable)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时,会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
转自:http://blog.csdn.net/hijk139/article/details/7301277
分享到:
相关推荐
优化步骤包括定位问题SQL、检查执行计划、分析统计信息、调整索引、表分析和改写SQL。优化的目标是使SQL简单、易读、节省资源,避免死锁。 **6. SQL共享原理** Oracle的共享池机制允许所有用户共享已解析的SQL语句...
Oracle数据库的高性能SQL优化是确保系统高效运行的关键环节。SQL优化涉及多个层面,包括设计、开发、测试和运行维护阶段,旨在提高吞吐量,减少响应时间,以满足业务需求。 首先,Oracle性能管理分为主动和被动两种...
根据表的大小和索引情况,调整表的连接顺序可能优化执行计划。 11. 使用DECODE函数来减少处理时间: DECODE函数可以避免IF-THEN-ELSE逻辑,简化查询,提高执行效率,尤其是在处理大量数据时。 总结,Oracle SQL...
在Oracle中,SQL语句优化是性能管理的核心,主要目标包括避免全表扫描、有效利用缓存、优化索引使用、改进连接技术和检查子查询的效率。 在SQL优化的不同阶段,性能收益会有所不同。设计阶段的优化可以带来最大的...
《Oracle高性能SQL调整》这本书主要聚焦于如何优化Oracle数据库中的SQL查询,以提升系统的整体性能。在Oracle数据库环境中,SQL的高效执行是确保系统稳定、快速运行的关键因素。以下是一些核心的知识点: 1. **SQL...
在Oracle数据库管理中,SQL优化是一项至关重要的任务,它直接影响到数据库系统的性能和效率。"Oracle SQL优化初步"这个主题涵盖了DBA们在日常工作中必须掌握的基础知识和技巧。SQL优化的目标是通过改进查询结构、...
Oracle SQL性能优化调整是数据库管理员和开发人员提升系统效率的关键技术。以下是对这些知识点的详细说明: 1. **选择适合的Oracle优化器**:Oracle数据库提供了两种主要的优化器——基于成本的优化器(CBO)和基于...
1. **SQL执行计划**:SQL执行计划是Oracle解析器为每个SQL语句制定的执行策略,包括表的扫描方式(全表扫描或索引扫描)、连接顺序、排序操作等。理解执行计划有助于找出性能瓶颈并进行优化。 2. **绑定变量**:...
这涉及到多个层面的知识,包括SQL优化、索引策略、表设计、数据库参数调整以及查询执行计划等。以下是对这些核心知识点的详细阐述: 1. **SQL优化**:SQL查询是数据库操作的基础,优化SQL语句能显著提高数据库性能...
4. **WHERE子句中的连接顺序**:优化器会根据WHERE子句中的条件进行操作,因此,将过滤效果明显的条件放在前面可以更快地减少数据集。 5. **SELECT子句中避免使用' * '**:使用列名列表代替通配符'*',可以避免不必...
【Oracle高性能SQL优化】是数据库管理员和开发人员关注的关键领域,旨在提高Oracle数据库系统的性能,减少资源消耗,提升用户体验。本讲座主要涵盖了Oracle性能管理的各个方面,特别是针对SQL语句的优化。 首先,...
3. **表连接优化**:在处理多表查询时,优化连接顺序和类型(如内连接、外连接、交叉连接)能显著提升性能。使用JOIN hints可以指导优化器选择更好的连接策略。 4. **子查询优化**:子查询有时会导致性能问题,可以...
Oracle SQL性能优化是数据库管理员和开发人员关注的重要领域,它涉及到如何有效地利用Oracle数据库资源,以提高查询速度,减少响应时间,并确保系统的整体性能。在本文中,我们将深入探讨Oracle SQL性能优化的关键...
5. **WHERE子句中的连接顺序**:根据过滤条件的筛选程度调整WHERE子句中条件的顺序,先处理过滤效果明显的条件。 6. **SELECT子句中避免使用' * '**:只选择需要的列,避免不必要的数据传输,降低网络I/O和内存消耗...
SQL 语句性能调整 ORACLE 的执行计划 SQL 语句性能调整是 Oracle 数据库开发中非常重要的一部分,它...这些案例可以帮助开发者更好地理解 SQL 语句性能调整和 ORACLE 的执行计划,从而提高 SQL 语句的执行效率和性能。
以上策略只是Oracle SQL性能优化的一部分,实际优化过程中还需要考虑索引设计、表分区、物化视图、数据库参数调整等多个方面。每种情况都需要根据具体的数据库环境、应用需求和资源状况来综合评估和实施。
9. **存储优化**:调整表空间、段、区的大小,以及行的存储格式(ROW Chunks、ROW Format等),可以影响数据读取的效率。 10. **SQL语句重构**:通过重写SQL语句,如减少嵌套查询,避免不必要的排序和分组,可以...
Oracle SQL性能优化是数据库管理中的关键环节,它涉及到如何提高SQL查询的速度,降低资源消耗,提升系统的整体响应时间和效率。以下是对文档中提及的关键知识点的详细说明: 1. **高效SQL的特点**: - **简洁性**...
Oracle SQL优化涉及到多个层面,包括查询结构优化、索引策略、表设计、统计信息的准确性和并行执行等。以下是对"ORACLE SQL 优化"这一主题的详细阐述: 1. **查询结构优化**:SQL语句的编写方式对性能有很大影响。...