数据库性能优化方法 oracle性能调优总结


数据库性能优化方法 oracle性能调优总结

文章插图

Oracle在性能调优中提供了丰富的工具和报表支持,如何从众多指标获取有价值的调优信息则需要开发测试人员具有一定的基础和经验 。本文主要对近几年碰到频率较高的几类性能问题进行经验总结,帮助开发、测试人员在调优过程中少走弯路,尽快定位、解决性能问题 。
除去硬件故障和产品本身bug外,本文分为配置类,sql效率类、应用程序逻辑三大类进行归纳介绍 。
1.配置类
1.1绑定变量
在联机交易系统中,对于频繁执行的SQL语句,如果所查数据分布较均匀、分区较均衡,建议使用绑定变量代替常量,以避免多次重复硬解析(Hard Parse),节省时间、资源成本 。
反例:
select * from user where userid=1;
select * from user where userid=2;
正例:
b1=1;
select * from user where userid= :b1;
b1=2;
select * from user where userid= :b1;
硬解析指标参考AWR报告中Load Profile–>Hard Parse/Sec(参考值:< 2 or 10),笔者一般会在大于1时用以下脚本查找可能需使用绑定变量优化的SQL 。
1、利用force_matching_signature查询可能可以使用绑定变量的语句数量
select v.force_matching_signature ,count(*) from v$sql v where FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE and PARSING_SCHEMA_NAME <> ‘SYS’ group by v.force_matching_signature having count(*)>&a order by 2;
2、查出疑似可使用绑定变量的SQL语句
select PARSING_SCHEMA_NAME,sql_text,sql_id from v$sql where force_matching_signature=’force_matching_signature_IDinStep1′;
3、 根据查询结果与开发人员沟通,确认是否可用绑定变量的方式对SQL语句进行优化 。
1)利用force_matching_signature查询可能可以使用绑定变量的语句数量
select v.force_matching_signature ,count(*) from v$sql v where FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE and PARSING_SCHEMA_NAME <> ‘SYS’ group by v.force_matching_signature having count(*)>&a order by 2;
2)查出疑似可使用绑定变量的SQL语句
select PARSING_SCHEMA_NAME,sql_text,sql_id from v$sql where force_matching_signature=’force_matching_signature_IDinStep1′;
3)根据查询结果与开发人员沟通,确认是否可用绑定变量的方式对SQL语句进行优化 。
绑定变量一定能优化性能吗?
–小心”绑定偷窥”!!!
T1表包含100万条记录,status字段含’A’,’C’两种不同取值,其中:
status=’A’ 99万9990条
status=’C’ 10条
SQL1:Select * from T1 where status=:b1
:b1 =’A’,则单表访问路径走全表扫描
SQL2:Select * from T1 where status=:b1
:b1 =’C’,则单表访问路径走索引范围扫描
理想情况下,传入不同变量的值,应该走不一样的单表访问路径,但Oracle优化器还不够智能 。Oracle在第一次做硬解析(内存中没有缓存执行计划)的时候,会先”偷窥”一眼,变量的值传入的是什么,如果传入的是”A”,则走全表扫描;并且把执行计划缓存 。
下一次执行的时候,由于执行计划已经缓存,就不再”偷窥”变量的值了,而是直接沿用全表扫描的执行计划 。这个时候即使传入的status变量为C,也走不上索引了 。
这个现象称为”绑定变量偷窥现象” 。一条SQL语句适合采用何种解析方式需要衡量硬解析带来的资源开销和查询计划不准带来的资源开销,从而确定是否采用绑定变量 。两种解析适用场景总结如下:
1.2连接池
经常收到一些”怎么查看应用到Oracle连接池是否够用”,”系统tps很低,SQL也简单,为啥数据库服务器cpu>10%?”


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: