经常听到很多开发人员抱怨ADF应用性能差,究其原因大概都与AM的Passivation(“钝化”)和Activation(“激活”)有关。
Passivation操作要向数据库表PS_TXN写入数据,Activation操作要从数据库表PS_TXN读取数据,它将直接影响应用的性能。
那么Passivation和Activation与AM的哪些配置参数有关呢?最直接相关的参数就是Referenced Pool Size。
如果并发用户数小于该值,AM不会做Passivation和Activation,因为AM池中有足够的AM实例供用户使用。
如果并发用户数大于该值,AM将会做Passivation和Activation,因为AM池中没有足够的AM实例供用户使用。
比如,Referenced Pool Size=20,并发用户数=21,当第21个用户发起请求时,因为没有AM实例可用,只好Passivation某个AM实例,待第21个用户请求完成后,再Activation该AM实例,恢复到之前的状态。
因此想要提高应用性能,就需要知道应用的最佳并发用户数和最大并发用户数,关于最佳并发用户数和最大并发用户数,请参考《性能调优概述》。
根据这两个值来设置Referenced Pool Size和其它相关参数,目的只有一个:尽量避免和减少Passivation和Activation的次数。
1. 在给ADF应用做压力测试时,如何确定最佳并发用户数?
当并发用户数小于Referenced Pool Size时,肯定不会有Passivation和Activation。
因此要让并发用户数大于Referenced Pool Size,运行24小时,然后通过EM Console监控应用Passivation和Activation的实例峰值。
如果峰值没有超过Referenced Pool Size,继续增加并发用户数(10%),直到发现峰值超过Referenced Pool Size,则最佳并发用户数就是前一个测试的并发用户数的大小。
该测试过程是一个不断寻找的过程,在这个过程中,可能要修改Referenced Pool Size以及其它相关参数,然后修改并发用户数,直到找到最佳的数值。
2. 在给ADF应用做压力测试时,如何确定最大并发用户数?
确定最佳并发用户数后,继续增加并发用户数(10%),直到到达Maximum Pool Size,说明已经接近了应用性能的极限。
继续测试,直到出现异常:无法获得AM实例,则最大并发用户数就是前一个测试的并发用户数的大小。
该测试过程也是一个不断寻找的过程,在这个过程中,可能要同时调整Referenced Pool Size和Maximum Pool Size以及其它相关参数,然后修改并发用户数,直到找到最大的数值。
3. 在给ADF应用做压力测试时,发现实际使用的数据库连接数超过了活动的AM实例,这是为什么?
一般来说,一个AM实例会使用一个数据库连接,但是在Passivation和Activation时会使用额外的数据库连接。
可以通过设置jbo.server.internal_connection属性,指向另外一个Data Source,与AM实例使用的Data Source分开。
然后再进行压力测试,观察的另一个Data Source的使用情况,这里就是额外的数据库连接。
4. 结论
(1)AM池能够支持大大超过池子大小的并发用户数。
(2)为了减少Passivation和Activation,尽可能地让Referenced Pool Size接近最佳并发用户数。
参考文献:
1. http://andrejusb.blogspot.com/2010/12/oracle-adf-bc-11g-tuning-for-immediate.html
2. http://andrejusb.blogspot.com/2010/02/optimizing-oracle-adf-application-pool.html
3. http://andrejusb.blogspot.com/2011/10/experimenting-with-adf-bc-application.html
4. http://andrejusb.blogspot.com/2011/10/adf-bc-tuning-with-do-connection.html
5. http://andrejusb.blogspot.com/2011/11/stress-testing-oracle-adf-bc.html
6. http://andrejusb.blogspot.com/2011/11/stress-testing-oracle-adf-bc_08.html
7. http://andrejusb.blogspot.com/2011/11/stress-testing-oracle-adf-bc_16.html
8. http://andrejusb.blogspot.com/2012/01/adf-performance-marathon-22-hours.html
9. http://andrejusb.blogspot.jp/2012/08/adf-bc-passivationactivation-and-sql.html
10. http://www.oracle.com/technetwork/developer-tools/jdev/index-097578.html
没有评论:
发表评论