寻找Oracle性能问题中的关键点

Oracle数据库的性能问题不会无缘无故出现,要懂得发现其中的关键变化,定位出主要的影响因素。这样子才能快速找出关键问题所在,才能够有针对性的进行优化和解决。


发现关键变化

数据库的性能下降往往是由变化引起的,比如:在进行对某张千万级的表进行大批量的数据插入时,有可能导致Oracle优化器识别错误。所以Oracle性能优化的时候,要首先考虑找出这种变化。这里可以通过之前观察和使用过程中设定好的数据库基准线,通过基准线找到关键变化。而不是只靠常规的优化经验去判断,这样子容易出现偏差。

因此,我们在处理数据库性能问题之前需要首先思考以下几个问题:

1、数据库系统性能是从什么时候开始变坏的?

2、是不是所有业务模块都不行了,还是局部模块不行了?

3、是不是在数据库变化的这个时间点,做了某些特殊的操作,比如:代码更新、数据统计、脚本执行、数据迁移、数据备份或硬件的替换等等。

4、是不是有的业务模块上线,是否有新的优惠活动,导致数据库访问量大大提升。

5、查找直接的维护记录,是否有出现过该类情况,是在什么时间节点出现的。

6、数据库的性能是刚刚突然就变化了,还是一个逐步的过程,从几个小时或者几天前逐渐变化的。

7、数据库的性能下降,是否会影响正常的业务,还是对某些特定的业务有影响。

8、硬件是否出现了故障?比如存储的电池故障导致CACHE失效。

如果这些关键变化中,并没有找到问题的原因,那可以考虑所使用的Oracle数据库,是不是自身带有某个BUG引起的性能问题。如果还是不能发现有特别的数据库问题,那就不必要纠结在数据库这个层级上找问题。还需要从其他层面(中间件、客户端应用等)寻找问题的答案。所以工程再解决性能问题时,需要冷静的思考和发现,而不是一上来就噼里啪啦的开始解决问题,这样子可能会没有找出关键的性能问题所在,还会二次上造成数据库的性能问题。


定位主要影响因素

影响本次数据库性能的问题,可能是复杂的糅合在一起,并不是单一的问题,这时一定要定位主要影响因素。这里定位主要影响因素指的是在进行数据库性能优化时要抓住主要矛盾,找出影响数据库性能的瓶颈。在寻找性能瓶颈时,常常会受到各种因素的影响,从而影响判断,所以很多时候需要耐心的找到哪个最关键的点。可以“一针见血”的解决问题,其它附带的性能问题会随着主要问题的解决,从而恢复到性能基准线之下。

比如:一条执行效率低下的SQL可能是由I/O性能缓慢引起的,如果此时花大精力去优化SQL的执行计划,所达到的效果可能远远不如优化I/O来得直接,所以在这里,存储I/O问题是引起数据库性能的主要因素。


总结:

在对数据库整体性能进行优化时,切记不要纠结细节,要懂得发现系统中的关键变化,定位出主要的影响因素。这样子才能快速有效的对系统进行优化。