性能调优常见的那些事儿-ORACLE上篇

Posted ABC心系

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能调优常见的那些事儿-ORACLE上篇相关的知识,希望对你有一定的参考价值。

文/施学勤、陈飞云

性能调优常见的那些事儿-ORACLE上篇 性能调优常见的那些事儿-ORACLE上篇

        近期,有同事反映能不能分享一下性能调优的经验,小系和诸君一起探讨在性能测试过程中经历的性能调优的那些事儿。本期内容主要介绍ORACLE中硬解析、连接池、并行模式、物化视图等配置类内容。


性能调优常见的那些事儿-ORACLE上篇

硬解析(Hard Parse)


性能调优常见的那些事儿-ORACLE上篇

首先,什么叫做硬解析呢?


答:如果sql语句的hash值在library cache中存在,而且sql语句与cache中的相同,则Oracle利用已有的解析树与执行计划,对sql语句进行解析,这个过程称之为软解析。反之,上述一个任何条件不成立,优化器都将进行创建解析树、生成执行划。这个过程就叫硬解析。

Q


硬解析高可能引发数据库资源瓶颈,怎样发现系统是否有硬解析问题呢


A
测试数据多样化,一定不要仅使用几条数据进行性能测试。
采集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语句进行优化。

如何减少硬解析呢?

绑定变量来帮忙!

在联机交易系统中,对于频繁执行的SQL语句,如果所查数据分布较均匀、分区较均衡,建议使用绑定变量代替常量,以避免多次重复硬解析,节省时间、资源成本。

正例:

b1=1;

select * from user where  userid= :b1;

b1=2;

select * from user where  userid= :b1;

反例:

select * from user where userid=1;

select * from user where userid=2;


性能调优常见的那些事儿-ORACLE上篇

绑定变量一定能优化性能吗?

——小心“绑定偷窥”!


T1表(100万条记录) status字段

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 执行次数少,数据分布不均,要求执行计划准确的复杂SQL(例如批量、报表)



性能调优常见的那些事儿-ORACLE上篇

数据库连接池


Q

怎样判断数据库的连接池是否够用呢

A

除了根据服务器连接数或利用第三方工具,可从以下4个方面间接判断连接池是否够用:


1.参考AWR报告中Load Profile-->Logons/Sec,参考值:< 2 or 10。
2.参考ADDM中出现Session Connect and Disconnect-->Percent of Activity > 10。
3.top命令中cpu消耗排在前10位进程中含tnslsnr,或该进程消耗cpu > 10%。
4.alert.log中出现连接频繁建立或断开的告警。

若满足以上2个条件,需适当增加连接池或检查是否用到连接池(尤其在使用应用自己开发的连接池时)。当然连接池设置的连接数也不是越大越好,如果数量设置较大,可能导致数据库服务器的进程数超过系统本身的承载能力,导致数据库服务器宕机。


性能调优常见的那些事儿-ORACLE上篇

并行模式PARALLEL


Q:
使用并发模式,可以提升执行效率,那我都用并行模式来执行DDL和DML?

A: 

      并行模式适用于针对大数据量的操作,应用得当能大大缩短计算时间。但其劣势在于:资源调度、合并结果集等比较消耗资源,不建议在系统超负荷运行的情况下使用。并行模式使用应注意以下几项:

   

性能调优常见的那些事儿-ORACLE上篇
联机交易往往并发较高,应避免使用并行。
性能调优常见的那些事儿-ORACLE上篇
联机交易高峰时段,避免批量或报表使用并行。
性能调优常见的那些事儿-ORACLE上篇
并行查询的优先级为语句提示(hint)、表级的定义、数据库初始化参数。后两者会造成响应时间慢、表扫描、会话阻塞等异常,不建议在应用运行时使用。
性能调优常见的那些事儿-ORACLE上篇
对于较大数据量的查询,可以使用提示(hint)来强制Oracle使用并行查询。
性能调优常见的那些事儿-ORACLE上篇
建表、索引时如需使用PARALLEL,完成后需切记关闭并行度,否则会造成后续使用该表、索引的SQL启用了并行,占用过多资源,导致其它会话等待,影响系统整体性能。
性能调优常见的那些事儿-ORACLE上篇
任务并行度不应大于服务器CPU数,建议单个任务并行度应小于CPU数/2。



性能调优常见的那些事儿-ORACLE上篇

统计信息缺乏或陈旧



Q:

平时运行的效率不错的SQL语句,怎么变慢了?

A:

 开发测试环境往往缺乏统计信息更新机制,统计信息陈旧可能造成SQL查询计划有误,查询效率低下。大量的数据加载或更新后应及时收集统计信息:

Dbms_stats收集统计信息:

Exec dbms_stats.gather_table_stats 

Exec dbms_status.gather_schema_stats

Exec dbms_status.gather_index_stats



性能调优常见的那些事儿-ORACLE上篇

物化视图



Q
在联机交易上应用物化视图,SQL语句简单多了,物化视图是个好东东?
A

物化视图是一种特殊的物理表,占用实际的存储空间,可用于读写分离,或者预先计算并保存表连接、嵌套或聚集等耗时较多的操作结果,在执行查询时能避免这些耗时操作,从而快速得到结果。物化视图主要用于数据仓库和决策支持系统,使用物化视图需注意:

性能调优常见的那些事儿-ORACLE上篇
对于高并发的联机系统、基表数据频繁更新且对数据实时性要求高的交易避免访问物化视图。
性能调优常见的那些事儿-ORACLE上篇
即使基表数据变更频繁,一般也不建议使用ON COMMIT数据刷新模式,推荐使用默认的ON DEMAND手工模式。
性能调优常见的那些事儿-ORACLE上篇
ON DEMAND模式下用到FAST增量刷新时,必须在创建有物化视图日志的情况下才能使用。
性能调优常见的那些事儿-ORACLE上篇
物化视图日志的大小直接会影响刷新速度。物化视图长时间不刷新,或者基表的一次批量数据变更均会导致物化视图日志变得很大。
性能调优常见的那些事儿-ORACLE上篇
物化视图日志的高水位达到较高位置,即使物化视图日志中记录很少甚至没有,仍然会影响物化视图的刷新速度。


性能调优常见的那些事儿-ORACLE上篇

所以小系提醒您,使用物化视图一定要谨慎,不要随便使用哦!


性能调优常见的那些事儿-ORACLE上篇
END

性能调优常见的那些事儿-ORACLE上篇

性能调优常见的那些事儿-ORACLE上篇

心系编辑部

编辑:成爽

轮值主编:刘佳亮

性能调优常见的那些事儿-ORACLE上篇

世界那么大

扫我带你去看看

本文为“心系”第201912期文章



以上是关于性能调优常见的那些事儿-ORACLE上篇的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库性能调优

通往测试架构师的必经路:Oracle常见性能问题调优总结

通往测试架构师的必经路:Oracle常见性能问题调优总结

性能测试常见调优

[性能调优]在PeopleSoft中使用函数索引

性能调优调优的常见思路和方法