在我们的项目中,我们使用Oracle XA连接池。 仅分发了一小部分查询(事务)。 休息是非常简单的单一数据库修改。
我想知道使用中是否存在性能差异 XAConnections与普通的相似。
我们使用websphere v6.1作为服务器。
如果XAConn不是非常高效,那么iam计划拥有两个数据源并根据需要使用它们的连接。
任何指针都会有很大的帮助。
答案 0 :(得分:2)
我没有基准来证实以下内容,这只是“我们都知道”的传统智慧。与所有性能讨论一样,您的Milage Will Vary,如果这对您的应用程序至关重要,那么您需要执行自己的基准测试。
我认为使用支持XA的连接池进行非XA工作没有明显的性能开销 - 当在事务中只使用一个资源时,WebSphere会小心使用1PC事务。 XA的主要开销是额外的Prepare / Commit / Forget XA消息集,这些在简单的1PC情况下不会发生。
因此,主要的危险是无意中启动了2PC交易。如果您针对相同的resoruce执行多项工作,但具有(例如)不同的隔离级别,则会发生这种情况。您从池中获取连接并执行一些工作,该连接现在与您的事务关联,直到COMMIT。您“关闭”连接,从概念上将其恢复到池中,但实际上WebSphere的池保持了事务的连接。你再次要求连接做更多的工作,只要你要求完全相同的连接,你将再次获得相同的连接,因此在单个事务中继续工作 - 我们只有1PC,没有开销。
我会采用最初拥有一个支持XA的池的方法,但有两个独立的resoruce引用,一个用于2PC工作,一个用于1PC工作。两个引用都指向同一个连接池。您的代码现在与任何需要单独的连接池隔离,如果您确实需要进行更改,则只需重新绑定resource-ref即可。