AM的参数中与数据库有关的有两个重要的参数:jbo.doconnectionpooling和jbo.txn.disconnect_level。
因为与数据库有关,所以这两个参数与性能有直接的关系。
1. jbo.doconnectionpooling
(1)=false,默认值,表明每个AM实例保留一个数据库连接,即使用户请求结束之后,依然保留,直到AM实例消亡。
优点:用户下一次请求时,不用再获取数据库连接。
缺点:大量的数据库连接被AM保留,即使这些连接未真正使用,导致服务器资源紧张。
(2)=true,表明每个AM实例只在请求期间保留一个数据库连接,用户请求结束之后,就释放数据库连接。
优点:及时释放数据库连接,节省服务器资源。
缺点:因为释放掉了数据库连接,需要保存当前cursor的位置(ADF-BC的原理如此),即Passivation,然后重新获取一个新的连接后再Activation,会导致性能下降。
(3)小结:如果最佳性能为首要目标,选择=false;如果以降低数据库连接数为首要目标,选择=true。
2. jbo.txn.disconnect_level
(1)=0,默认值,表明当AM释放掉数据库连接时,AM的状态(VO、RowSet、Cursor)会持久化到数据库中。
(2)=1,表明,表明当AM释放掉数据库连接时,AM的状态(VO、RowSet、Cursor)会持久化到内存中。
3. jbo.doconnectionpooling=true + jbo.txn.disconnect_level=1
既然单独jbo.doconnectionpooling=true,会由于Passivation和Activation而导致性能下降,那么作为补偿的手段之一设置jbo.txn.disconnect_level=1,可以弥补一些性能的下降。
结论
(1)如果用户并发数不是很高,并且降低数据库连接数不作为首要目标,那么可以选择jbo.doconnectionpooling =false,因为这样应用的性能比较好(在每次请求时不用重新获取数据库连接和AM状态的持久化)。
这是一种牺牲数据库链接资源保证应用性能的作法。
(2)如果用户并发数很高,并且降低数据库连接数作为首要目标,那么可以选择jbo.doconnectionpooling =true,同时设置jbo.txn.disconnect_level=1,这样在减少数据库连接的同时,AM的状态持久化到内存中。
这是一种节省数据库资源的同时,尽量不降低应用性能的作法。
(3)参数的选择最终要根据应用压力测试的结果,没有哪一种配置是适合所有应用的。