2009-06-22 141 views
2

在我们的项目中,我们使用Oracle XA连接池。 只分配一小部分查询(事务)。 其余的都是非常简单的单一数据库修改。Oracle中的XAConnection性能(10g)

我想知道在使用中是否存在性能差异 XAConnections是正常的。

我们使用websphere v6.1作为服务器。

如果XAConn不是非常高效,那么iam计划拥有两个数据源并根据需要使用它们的连接。

任何指针都会有很大的帮助。

回答

2

我没有基准来证实以下几点,这只是“大家都知道”的传统观点。与所有的性能讨论一样,如果您的应用程序对您的应用程序绝对至关重要,那么您需要执行自己的基准测试。

我相信对于非XA工作使用支持XA的连接池没有显着的性能开销 - 当事务中只使用单个资源时,WebSphere会小心使用1PC事务。 XA的主要开销是额外的Prepare/Commit/Forget XA消息,这些不会发生在简单的1PC情况下。

所以主要的危险是无意发起2PC交易。这可能会发生,如果你做了几件工作据说是针对同一个resoruce但有(例如)不同的隔离级别。您从池中获得一个连接并执行一些工作,该连接现在与您的事务相关联,直到COMMIT。您“关闭”了连接,从理论上来说,它将其引入池中,但事实上,WebSphere的池将为您的事务保持连接。你再次要求连接做更多的工作,只要你要求完全相同的连接,你会得到同样的连接,所以工作在一个事务中继续 - 我们只有1PC,没有开销。

我会采取初始拥有单个支持XA的池的方法,但有两个独立的resoruce引用,一个用于2PC工作,一个用于1PC工作。两个引用都指向同一个连接池。现在,您的代码与任何需要单独连接池的应用程序隔离,如果您需要进行更改,则只需重新绑定资源引用即可。