执行存储过程时候的一个非常奇怪的性能问题

系统中存在一个模块,需要完成大量的合法性检查和查询,为了提高性能,设计了存储过程包和一个主存储过程,由数据访问层调用, 但是在执行该模块的时候经常超时,甚至等抛出待锁的错误。在我的计算机上同样安装了Oracle,但是执行该存储过程的时间不超过5秒钟, 使用该模块的时候性能也是表现很好。花费了将近一个星期的时间对该执行该存储过程进行优化,但是问题依然没有得到解决,百思不得其解。 后来想到我们的系统是一个分布式的系统,客户端操作数据都是通过中间件服务器进行的。怀疑是不是中间价服务器与Oracle服务器通讯的性能 很差的原因造成的。

在中间价服务器上安装了PL/sql developer,然后执行上述的存储过程,这时候一个非常奇特的现象出现了,存储过程执行的时候特别的慢, 消耗了11分钟才执行完毕。也就是说,系统的性能瓶颈可能在中间件服务器与Oracle服务器的通讯上。

为了验证这个问题,在另外一台测试服务器上安装了Oracle,建立相关的数据环境,同样执行该存储过程的时间没有超过5秒钟。也就是说 可以确定中间件服务器与Oracle服务器的通讯是系统性能的瓶颈。

客户的Oracle服务器操作系统是Unix操作系统,硬件是小型机,中间价服务器采用windows server2003 R2,按照常规的理解,其性能应该 非常好才对。因为没有权限对Unix操作的设置做检查,对 unix操作系统也不是特别精通,经协商让用户咨询IBM等供应商来解决这个问题。目前用户 暂时将Oracle安装到windows平台下使用。

由此想到我们平时总是强调PL/SQL和Oracle的性能优化,是完全从程序的角度出发的优化方式,其实有的时候性能不仅仅是程序的问题,同样 硬件对性能的影响也是非常大的,甚至是致命的。

影响性能的因素藏在系统应用环境的每一个角落!!

原文地址:https://www.cnblogs.com/yanrongpi/p/991262.html